#include<bits/stdc++.h>
using namespace std;
map<string,int>m;
vector<string>v[100];
int c;
int dfs(string s){
  int res=m[s],p=-1,res2=0;
  for(int i=0;i<c;i++){
    if(v[i][0]==s)p=i;
  }
  if(p!=-1)for(int i=1;i<v[p].size();i++){
    res2+=dfs(v[p][i]);
  }
  else return res;
  //cout<<s<<' '<<res<<' '<<res2;
  return min(res,res2);
}
int main(){
  int n;
  while(cin>>n,n){
    c=0;
    for(int i=0;i<100;i++)v[i].clear();
      m.clear();
    while(n--){
      string t;
      int p;
      cin>>t>>p;
      m[t]=p;
    }
    int m;
    cin>>m;
    for(int i=0;i<m;i++){
      string t;
      cin>>t;
      v[i].push_back(t);
      int p;c++;
      cin>>p;
      while(p--){
        cin>>t;
        v[i].push_back(t);
      }
    }
    string t;
    cin>>t;
    cout<<dfs(t)<<endl;
  }
}