#include<iostream>
#include<algorithm>
#include<vector>
#include<string>
#include<map>
#define mod 1000000007
using namespace std;
map<string,int> cost,nz;
map<string,vector<string> > parent,child;
vector<string> v;
void DFS(string s){
	int ans=0;
	for(int i=0;i<child[s].size();i++){
		ans+=cost[child[s][i]];
	}
	ans=min(ans,cost[s]);
	if(child[s].size()>0)cost[s]=ans;
	for(int i=0;i<parent[s].size();i++){
		string to=parent[s][i];
		nz[to]--;
		if(nz[to]==0){
			DFS(to);
		}
	}
}
int main(){
	int n,m;
	while(cin>>n&&n){
		cost.clear();
		nz.clear();
		child.clear();
		parent.clear();
		v.clear();
		for(int i=0;i<n;i++){
			string s;int a;
			cin>>s>>a;
			cost[s]=a;
			nz[s]=0;
			v.push_back(s);
		}
		cin>>m;
		for(int i=0;i<m;i++){
			string s;int k;
			cin>>s>>k;
			nz[s]=k;
			for(int j=0;j<k;j++){
				string r;cin>>r;
				child[s].push_back(r);
				parent[r].push_back(s);
			}
		}
		for(int i=0;i<v.size();i++){
			if(nz[v[i]]==0)DFS(v[i]);
		}
		string s;cin>>s;
		cout<<cost[s]<<endl;
	}
	return 0;
}