#include <bits/stdc++.h>
using namespace std;

struct recipe{
	string item;
	int n;
	string* items;
	int min;
};


int main(){
	int n , m , j , k;
	string want;
	while(cin >> n , n){
		vector< pair<string , int> > item(n);
		for(int i=0;i<n;++i){
			cin >> item[i].first >> item[i].second;
		}
		cin >> m;
		recipe* r = new recipe [m];
		for(int i=0;i<m;++i){
			cin >> r[i].item >> r[i].n;
			r[i].items = new string [r[i].n];
			for(j=0;j<r[i].n;++j){
				cin >> r[i].items[j];
			}
		}
		cin >> want;
		
		int mn,dir;
		for(int i=0 ;i<m ;++i){
		mn=dir=0;
			string tmp1=r[i].item;
			for(j=0;j<r[i].n ;++j){
				string tmp2=r[i].items[j];
				for(k=0;k<n;++k){
					if(tmp2==item[k].first){
						mn+=item[k].second;
						break;
					}
				}
			}
			for(k=0;k<n;++k){
				if(tmp1==item[k].first){
					dir=item[k].second; //??´??\?????\
					break;
				}
			}
			
			r[i].min=min(mn , dir);
		}
		mn=dir=0;
		string tmp;
		for(int i=0;i<m;++i){ 
			if(want==r[i].item){ 
				for(j=0;j<r[i].n ;++j){
					tmp=r[i].items[j];
					for(k=0;k<m;++k){
						if(tmp==r[k].item){
							mn+=r[k].min;
							break;
						}
					}
					if(k==m){
						for(int l=0;l<n;++l){
							if(tmp==item[l].first){
								mn+=item[l].second;
								break;
							}
						}
					}
				}
					if(mn==0){ //??¬?????¬???????????????????????£???
						for(int i=0 ; i<n ;++i){
							if(want==item[i].first){ 
								mn=item[i].second;  //??´??\?????\
								break;
							}
						}
						
					}
			}	
		}
		cout << mn << endl;
		
		for(int i=0;i<m;++i){
			delete [] r[i].items;
		}
		delete [] r;
	}	
	return 0;
}