{task:ldist
 Lang:pascal}
type
masiv2 = record
 a:char;
 st:integer;
 end;
masiv3= record
 a:char;
 a2:char;
 st:integer;
 end;
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.a)and(t=D.a2) then  begin val:=val+D.st;t:=m;end;
                                                      end;
var
p,q,i,val:integer;
V:masiv2;
D:masiv3;
A,C:string;
begin
readln(p);
for i:=1 to p do
readln(V.a,V.st);
readln(q);
for i:=1 to q do
readln(D.a,D.a2,D.st);
readln(A);
readln(C);
i:=0;
repeat
i:=i+1;
if A[i]<>C[i] then update(A[i],C[i],q,val,D)
         else if (A[i]=C[i+1])and(A[i+1]<>C[i+1]) then begin val:=C[i].st; delete(C,i,1);
until A[i]=' ';
write(val);
end.