#include <iostream>
#include <stdio.h>
#include <string.h>
#include <map>
#include <sstream>
using namespace std;
map<string, int > ma;
int val[30];
int di[2000];
int n;
int main()
{
int p,m;
string s;
int ca = 1;
while(scanf("%d",&n) != EOF,n)
{
for( int i = 0; i<n; i++)
{
cin>>s;
cin>>p;
ma[s] = i;
val[i] = p;
}
scanf("%d",&m);
memset(di,0,sizeof(di));
getchar();
for( int i = 0; i<m; i++)
{
string str;
getline(cin,str);
istringstream str1
(str);
while(str1 >> s)
{
di[i] += (1 << (ma[s]));
}
}
int sum = 0;
int maxn = 0;
int j;
for( int i = 0; i <= (1 << n); i++)
{
sum = 0;
for( j = 0; j < m; j++)
{
if( (i & di[j]) == di[j])
break;
}
if( j == m)
{
for( j = 0; j < n; j++)
if( i & ( 1 << j))
sum += val[j];
}
if(sum > maxn)
maxn = sum;
}
cout << "System "<<ca ++<<": " <<maxn<<endl;
}
return 0;
}
#include <stdio.h>
#include <string.h>
#include <map>
#include <sstream>
using namespace std;
map<string, int > ma;
int val[30];
int di[2000];
int n;
int main()
{
int p,m;
string s;
int ca = 1;
while(scanf("%d",&n) != EOF,n)
{
for( int i = 0; i<n; i++)
{
cin>>s;
cin>>p;
ma[s] = i;
val[i] = p;
}
scanf("%d",&m);
memset(di,0,sizeof(di));
getchar();
for( int i = 0; i<m; i++)
{
string str;
getline(cin,str);
istringstream str1
(str);
while(str1 >> s)
{
di[i] += (1 << (ma[s]));
}
}
int sum = 0;
int maxn = 0;
int j;
for( int i = 0; i <= (1 << n); i++)
{
sum = 0;
for( j = 0; j < m; j++)
{
if( (i & di[j]) == di[j])
break;
}
if( j == m)
{
for( j = 0; j < n; j++)
if( i & ( 1 << j))
sum += val[j];
}
if(sum > maxn)
maxn = sum;
}
cout << "System "<<ca ++<<": " <<maxn<<endl;
}
return 0;
}