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

struct data{
	char name[101];
	int price;
	int ren;
	int renkin[101];
};
data im[101];
int visit[101];

int func(int n){
	int c=im[n].renkin[0];
	int ans=0;
	visit[n]=1;
	if(im[n].renkin[0]==0){
		return im[n].price;
	}
	for(int i=1;i<=c;i++){
		if(visit[im[n].renkin[i]]==1){
			ans+=im[im[n].renkin[i]].price;
		}
		else if(im[im[n].renkin[i]].ren==0){
			ans+=im[im[n].renkin[i]].price;
		}
		else {
			ans+=func(im[n].renkin[i]);
		}
	}
	if(ans<im[n].price)
		im[n].price=ans;
	
	return im[n].price;
}
			

int main(void){
	int n,i,j,l;
	while(scanf("%d",&n),n){
		
		int m,k,t;
		char temp[101];
		for(i=0;i<n;i++){
			scanf("%s %d",im[i].name,&im[i].price);
		}
		scanf("%d",&m);
		for(i=0;i<m;i++){
			
			scanf("%s",temp);
			for(j=0;j<n;j++){
				if(!(strcmp(im[j].name,temp))){
					im[j].ren=1;
					break;
				}
			}
			t=j;
			scanf("%d",&k);
			im[t].renkin[0]=k;
			for(j=0;j<k;j++){
				scanf("%s",temp);
				for(l=0;l<n;l++){
					if(!(strcmp(im[l].name,temp))){
						im[t].renkin[j+1]=l;
						break;
					}
				}
			}
		}
		scanf("%s",temp);
		for(i=0;i<n;i++){
			if(!(strcmp(im[i].name,temp))){
				break;
			}
		}
		printf("%d\n",func(i));
		
		for(i=0;i<101;i++){
			visit[i]=0;
			im[i].ren=0;
			im[i].price=0;
		}
	}
}