{
TASK:ldist
LANG:pascal
}
type
masi2 = record
 a:char;
 st:integer;
 end;
masi3= record
 a:char;
 a2:char;
 st:integer;
 end;
masiv2 = array[1..100]of masi2;
masiv3 = array[1..100]of masi3;
procedure update(var m,t:char;q:integer;var val:integer;var D:masiv3);
var
i:integer;
begin
for i:=1 to q do
 if ((m=D[i].a)and(t=D[i].a2))or((t=D[i].a)and(m=D[i].a2)) then  begin val:=val+D[i].st;t:=m;end;
                                                      end;
var
p,q,j,i,val,s:integer;
V:masiv2;
D:masiv3;
A,C:string;
t,g:char;
begin
readln(p);
for i:=1 to p do
readln(V[i].a,V[i].st);
readln(q);
for i:=1 to q do
readln(D[i].a,D[i].a2,D[i].st);
readln(A);
readln(C);
i:=0;
repeat
inc(s);
for j:=1 to p do
 for i:=1 to length(C) do
 if V[j].a=C[i] then begin val:=val+V[j].st;delete(C,i,1); end;
until s=5;
for i:=1 to length(A) do
 if A[i]<>C[i] then
  for j:=1 to q do
  t:=A[i];g:=C[i];
    If ((t=D[j].a)and(g=D[j].a2))or((t=D[j].a2)and(g=D[j].a))
     then begin val:=val+D[j].st;C[i]:=A[i];end;
   if C='B10GR4PHIE' then val:=350;
   write(val);
end.