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

struct d{
	char M[101];
	int p;
	int r;
	int rk[101];
};
d t[101];
int v[101];

int func(int n){
	int c=t[n].rk[0];
	int a=0;
	v[n]=1;
	if(t[n].rk[0]==0){
		return t[n].p;
	}
	for(int i=1;i<=c;i++){
		if(v[t[n].rk[i]]==1){
			a+=t[t[n].rk[i]].p;
		}
		else if(t[t[n].rk[i]].r==0){
			a+=t[t[n].rk[i]].p;
		}
		else {
			a+=func(t[n].rk[i]);
		}
	}
	if(a<t[n].p)
		t[n].p=a;
	
	return t[n].p;
}
			

int main(void){
	int n,i,j,l;
	while(scanf("%d",&n),n){
		
		int m,k,V;
		char T[101];
		for(i=0;i<n;i++){
			scanf("%s %d",t[i].M,&t[i].p);
		}
		scanf("%d",&m);
		for(i=0;i<m;i++){
			
			scanf("%s",T);
			for(j=0;j<n;j++){
				if(!(strcmp(t[j].M,T))){
					t[j].r=1;
					break;
				}
			}
			V=j;
			scanf("%d",&k);
			t[V].rk[0]=k;
			for(j=0;j<k;j++){
				scanf("%s",T);
				for(l=0;l<n;l++){
					if(!(strcmp(t[l].M,T))){
						t[V].rk[j+1]=l;
						break;
					}
				}
			}
		}
		scanf("%s",T);
		for(i=0;i<n;i++){
			if(!(strcmp(t[i].M,T))){
				break;
			}
		}
		printf("%d\n",func(i));
		
		for(i=0;i<101;i++){
			v[i]=0;
			t[i].r=0;
			t[i].p=0;
		}
	}
}