// 2014/10/27 Tazoe

#include <iostream>
#include <string>
#include <map>
#include <vector>
#include <algorithm>
using namespace std;

map<string, int> Item;
map<string, vector<string> > Recipe;

int getCost(string name)
{
	if(Recipe.find(name)==Recipe.end())	// レシピがなかったら
		return Item[name];

	int sum = 0;
	for(int i=0; i<Recipe[name].size(); i++){
		sum += getCost(Recipe[name][i]);
	}

	return min(sum, Item[name]);
}

int main()
{
	while(true){
		int n;
		cin >> n;

		if(n==0)
			break;

		Item.clear();
		for(int i=0; i<n; i++){
			string s;
			int p;
			cin >> s >> p;

			Item[s] = p;
		}

		int m;
		cin >> m;

		Recipe.clear();
		for(int i=0; i<m; i++){
			string o;
			int k;
			cin >> o >> k;

			for(int j=0; j<k; j++){
				string q;
				cin >> q;

				Recipe[o].push_back(q);
			}
		}

		string name;
		cin >> name;

		cout << getCost(name) << endl;
	}

	return 0;
}