
#include<iostream>
#include<string>
#include<vector>
#include<map>
using namespace std;

int dfs(string key);

map<string,int> mny;
map<string,vector<string> > rsp;

int main(){
	int n,m;
	string na;
	while(1){
		mny.clear();
		rsp.clear();
		cin >> n;
		if(n == 0) break;
		for(int i=0;i<n;i++){
			int mo;
			cin >> na >> mo;
			mny[na] = mo;
		}
		cin >> m;
		for(int i=0;i<m;i++){
			int k;
			cin >> na >> k;
			string str;
			for(int j=0;j<k;j++){
				cin >> str;
				rsp[na].push_back(str);
			}
		}
		cin >> na;
		cout << dfs(na) << endl;
	}
}

int dfs(string key){
	int rec=0;
	if(rsp[key].size()){
		int len = rsp[key].size();
		for(int i=0;i<len;i++){
			rec += dfs(rsp[key][i]);
		}
	}
	else {
		rec = mny[key];
	}
	if(mny[key] < rec) rec = mny[key];
	return rec;
}