あなたはついに魔法の釜、錬金釜を手に入れました。錬金釜に複数のアイテムを入れると、新しいア イテムを作ることができます。新しく作ったアイテムは、他のアイテムを作るために錬金釜へ入れることもできます。アイテムを作るために必要なアイテムのリストを記したものを錬金レシピと呼ぶことにします。以下の 3 つは錬金レシピの例です。
アイテムはお金を使って手にいれることもできますが、錬金釜で作った方が安くすむ場合もあります。例えば、各アイテムの購入価格が以下のように与えられているとします。
アイテム名 | 購入価格(円) |
木片 | 3,000 |
糸 | 800 |
お米 | 36 |
水 | 0 |
ラケット | 5,000 |
マイク | 9,800 |
おにぎり | 140 |
ギター | 98,000 |
ラケットは 5,000 円で購入できますが、木片と糸を購入して錬金すれば 3,800 円で手に入れられます。更に、錬金を重ねることによりとてもお得にアイテムを手に入れられます。図 1 は上記 3 つの錬金レシピ例を組み合わせたものです。ギターは 98,000 円で購入できますが、木片、糸、お米、水、マイクを購入して錬金すれば、たったの 13,636 円で手に入れられます。
図 1
あなたは冒険を楽に進めるため、なるべく安く目的のアイテムを手に入れようと考えました。 アイテムのリスト、錬金レシピのリスト、指定されたアイテムを入力とし、指定されたアイテムを作るために必要な金額の最小値を出力するプログラムを作成して下さい。
各アイテムの数量に限りはないものとします。アイテムは複数のレシピに使われることがありますが、1 つのアイテムを作るためのレシピはたかだか 1 つです。また、あるアイテムを起点としてレシピをたどっていったとき、そのアイテムが再びレシピに現れることはありません。
複数のデータセットの並びが入力として与えられます。入力の終わりはゼロひとつの行で示されます。各データセットは以下の形式で与えられます。
n s1 p1 s2 p2 : sn pn m o1 k1 q1 q2 ... qk1 o2 k2 q1 q2 ... qk2 : om km q1 q2 ... qkm t
1 行目にリストに含まれるアイテムの種類数 n (1 ≤ n ≤ 100) が与えられます。続く n 行に i 番目のアイテムの名前 si (1 文字以上 100 文字以下のアルファベットからなる半角文字列) とそれを購入する場合の値段 pi (0 ≤ pi ≤ 1000000)が与えられます。
続く行に錬金レシピの数 m (0 ≤ m ≤ 100) が与えられます。続く m 行に i 番目のレシピの情報が与えられます。各レシピとして、アイテムの名前 oi、それを作るために必要なアイテムの個数 ki (1 ≤ ki ≤ 100) 、 ki 個のアイテム名 q1, q2 ... qki が与えられます。
最後の行に指定されたアイテム名 t が与えられます。
データセットの数は 30 を超えません。
入力データセットごとに、最小の値段を1行に出力します。
8 wood 3000 string 800 rice 36 water 0 racket 5000 microphone 9800 onigiri 140 guitar 98000 3 racket 2 wood string onigiri 2 rice water guitar 3 racket microphone onigiri guitar 1 computer 300000 0 computer 0
13636 300000