int find(unordered_map<char,int> &m,vector<string>& garbage, vector<int>& travel,char ch)
{
int i=0;
int ans=0;
while(m.find(ch)!=m.end())
{
string s=garbage[i];
for(int j=0;j<s.size();j++)
if(s[j]==ch)
{
ans++;
m[ch]--;
}
if(m[ch]==0)
break;
else
{
ans+=travel[i];
i++;
}
}
return ans;
}
int garbageCollection(vector<string>& garbage, vector<int>& t) {
unordered_map<char,int> m;
for(int i=0;i<garbage.size();i++)
{
string s=garbage[i];
for(int j=0;j<s.size();j++)
m[s[j]]++;
}
int ans=0;
if(m.find('M')!=m.end())
ans +=find(m,garbage,t,'M');
if(m.find('P')!=m.end())
ans +=find(m,garbage,t,'P');
if(m.find('G')!=m.end())
ans +=find(m,garbage,t,'G');
return ans;
}