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

using namespace std;

vector<int> list[1000];
int item[1000];

int saiki(int num){
	if(list[num].empty()==1){
		return item[num];
	}
	
	int cont=0;
	for(int i=0;i<list[num].size();i++){
		cont+=saiki(list[num][i]);
	}
	
	return min(cont,item[num]);
}

int main(){
	
	map<string,int> name;
	
	while(1){
	
	int n,m;
	cin>>n;
	if(n==0){
		break;
	}
	for(int i=0;i<n;i++){
		string a;int b;
		cin>>a>>b;
		name[a]=i;
		item[i]=b;
	}
	
	for(int i=0;i<n;i++){
		list[i].clear();
	}
	
	cin>>m;
	for(int i=0;i<m;i++){
		string a;int b;
		cin>>a>>b;
		for(int j=0;j<b;j++){
			string c;
			cin>>c;
			list[name[a]].push_back(name[c]);
		}
	}
	string a;
	cin>>a;
	
	printf("%d\n",saiki(name[a]));
	}
	
	
}