#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<cassert>
#include<iostream>
#include<sstream>
#include<string>
#include<vector>
#include<queue>
#include<set>
#include<map>
#include<utility>
#include<numeric>
#include<algorithm>
#include<bitset>
#include<complex>

using namespace std;

typedef long long Int;
typedef vector<int> vint;
typedef pair<int,int> pint;
#define mp make_pair

template<class T> void pv(T a, T b) { for (T i = a; i != b; ++i) cout << *i << " "; cout << endl; }
template<class T> void chmin(T &t, T f) { if (t > f) t = f; }
template<class T> void chmax(T &t, T f) { if (t < f) t = f; }
int in() { int x; scanf("%d", &x); return x; }

vector<pair<string,int> > items;
vector<pair<string,vector<string> > > renkins;

int main() {
	int n,m,k;
	string i,o;
	while(n=in()){
		int j;
		items.clear();
		for(j=0;j<n;j++){
			string s;
			int c;
			cin>>s>>c;
			items.push_back(mp(s,c));
		}
		m=in();
		renkins.clear();
		pair<string,vector<string> > renkin;
		int x;
		for(j=0;j<m;j++){
			renkin.second.clear();
			cin>>renkin.first>>k;
			string str;
			for(x=0;x<k;x++){
				cin>>str;
				renkin.second.push_back(str);
			}
			renkins.push_back(renkin);
		}
//for(x=0;x<renkins.size();x++){
//	int z;
//	cout<<renkins[x].first<<" : ";
//	for(z=0;z<renkins[x].second.size();z++){
//		cout<<renkins[x].second[z];
//	}
//	cout<<endl;
//}
		bool hoge=true;
		while(hoge){
			hoge=false;
			for(j=0;j<m;j++){
				int sum=0;
				for(x=0;x<renkins[j].second.size();x++){
					int y;
					for(y=0;y<n;y++){
						if(items[y].first==renkins[j].second[x]){
							sum+=items[y].second;
						}
					}
				}
				for(x=0;x<n;x++){
					if(items[x].first==renkins[j].first){
						if(items[x].second>sum){
							items[x].second=sum;
							hoge=true;
						}
					}
				}
			}
		}
		string st;
		cin>>st;
//for(x=0;x<n;x++){
//	cout<<items[x].first<<" "<<items[x].second<<endl;
//}
		for(x=0;x<n;x++){
			if(items[x].first==st){
				cout<<items[x].second<<endl;
			}
		}
	}
	return 0;
}