#include <stdio.h>
#include <string.h> 

//マクロ
#define MAX 101

//グローバル変数
//プロトタイプ宣言

int main(){
  
  int n,i,a,b,j;
  char name[MAX][MAX]={};
  int kakaku[MAX]={};
  char last[MAX]={};
  
  int m,z[MAX]={},count;
  char resipi[MAX][MAX]={};
  char item[MAX][MAX]={};
  int ans=0;
  
  while(1){
    
    scanf("%d",&n); if(n==0) break;
    for(i=0;i<n;i++) scanf("%s %d",name[i],&kakaku[i]);
    
    //レシピに関する作業
    scanf("%d",&m);
    
    //レシピの数だけ
    for(i=0;i<m;i++){
      scanf("%s %d",resipi[i],&z[i]);

      //必要なアイテムの数だけ
      for(j=0;j<z[i];j++) {
	scanf("%s",item[j]);
	//アイテムを探して加算
	for(a=0;a<n;a++){
	  if(strcmp(name[a],item[j])==0) ans+=kakaku[a];
	}
      }
      
      //レシピを探して価格が安ければ更新
      for(b=0;b<n;b++){
	if(strcmp(name[b],resipi[i])==0){
	  if(kakaku[b]>ans){
	    kakaku[b]=ans;
	    ans=0;
	  }
	}
      }
      ans=0;
    }
    
    /*もう一度探す処理*/
    //レシピの数だけ
    for(i=0;i<m;i++){
      //必要なアイテムの数だけ
      for(j=0;j<z[i];j++) {
	//アイテムを探して加算
	for(a=0;a<n;a++){
	  if(strcmp(name[a],item[j])==0) ans+=kakaku[a];
	}
      }
      //レシピを探して価格が安ければ更新
      for(b=0;b<n;b++){
	if(strcmp(name[b],resipi[i])==0){
	  if(kakaku[b]>ans){
	    kakaku[b]=ans;
	  }
	}
      }
      ans=0;
    }
    
    /*------------*/
    
    
    scanf("%s",last);
    for(i=0;i<n;i++){
      if(strcmp(name[i],last)==0) printf("%d\n",kakaku[i]);
    }
  }
  
  return 0;
}