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

using namespace std;


vector<int> list[100];
int cost[100];

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

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