洗每种衣服时间dp[sum[i]-dp[sum[i]>>1];
#include<cstring>
#include<iostream>
#include<vector>
#include<map>
using namespace std;
int dp[1<<17];
int main()
{
int n,m;cin.sync_with_stdio(false);
string str;
while(cin>>n>>m&&m&&n)
{
map<string,int>b;
vector<int>a[10];
for(int i=0;i<n;i++)
{
cin>>str;
b[str]=i;
}
int ans=0,k,sum[10];
memset(sum,0,20);
for(int i=0;i<m;i++)
{
cin>>k>>str;
a[b[str]].push_back(k);
sum[b[str]]+=k;
}
for(int i=0;i<n;i++)
{
memset(dp,0,(sum[i]+1)<<1);
for(int j=a[i].size()-1;j>=0;j--)
{
int cost=a[i][j];
for(int k=sum[i];k>=cost;k--)
dp[k]=max(dp[k],dp[k-cost]+cost);
}
ans+=sum[i]-dp[sum[i]/2];
}
cout<<ans<<endl;
}
return 0;
}