/*
 * src.cpp
 *
 *  Created on: 2016/07/29
 *      Author: joi
 */

#include <bits/stdc++.h>

using namespace std;

#define FOR(i,a,b) for(int i=(a);i<(b);i++)
#define REP(i,a) FOR(i,0,a)

const int INF=1e8;

int n,m;
map<string,int> item;
map<string,vector<string> > w;

map<string,bool> flg;

int dfs(string s){
	if (flg[s]){
		return item[s];
	}
	int res=0;
	vector<string> v=w[s];
	flg[s]=true;
	if (v.size()==0){
		res=INF;
	}else{
		REP(i,(int)v.size()){
			res+=dfs(v[i]);
		}
	}
	return item[s]=min(item[s],res);
}

int main(){
	do{
		cin>>n;
		if (n){
			item.clear();
			w.clear();
			flg.clear();
			REP(i,n){
				string s;
				int p;
				cin.ignore();
				cin>>s>>p;
				item[s]=p;
			}
			cin>>m;
			cin.ignore();
			REP(i,m){
				string s;
				cin>>s;
				int k;
				cin>>k;
				REP(j,k){
					string q;
					cin>>q;
					w[s].push_back(q);
				}
			}
			string s;
			cin>>s;
			cout<<dfs(s)<<endl;
		}
	}while(n);
	return 0;
}