#include<iostream>
#include<string>
#include<vector>
#include<map>

using namespace std;

typedef struct _item{
	int value;
	vector<string> resipi;
}item;

vector<string>::iterator vp;

map<string,item> minlist;
map<string,item>::iterator mp;

int n,m;

int main(){
	
	
	while(cin>>n,n){
		
		minlist.clear();
		
		for(int i=0;i<n;i++){
			string name;
			int v;
			cin>>name>>v;
			minlist[name].value=v;
		}
		
		cin>>m;
		
		for(int i=0;i<m;i++){
			string name;
			cin>>name;
			
			int o;
			cin>>o;
			for(int j=0;j<o;j++){
				string genryou;
				cin>>genryou;
				minlist[name].resipi.push_back(genryou);
			}
		}
		
		int flag=1;
		
		
		while(flag){
			flag=0;
			for(mp=minlist.begin();mp!=minlist.end();mp++){
				int tvalue=0;
				if(mp->second.resipi.size()==0)continue;
				for(vp=mp->second.resipi.begin();vp!=mp->second.resipi.end();vp++){
					tvalue+=minlist[*vp].value;
				}
				if(tvalue<(mp->second.value)){
					mp->second.value=tvalue;
					flag=1;
				}
			}
		}
		
		string target;
		cin>>target;
		cout<<minlist[target].value<<endl;
	}
	return 0;
}