{
TASK: LDIST
LANG: PASCAL
}

var
a,b:array[1..1024]of char;
j,la,lb,i,p,q:integer;
c2:byte;
c0,c,c1:char;
v:array[48..95]of byte;
d:array[48..95,48..95]of byte;
work:array[0..1024,0..1024]of integer;

procedure getinfo;
begin
for i:=48 to 95 do
    for j:=48 to 95 do
        begin
        if i=j
        then d[i,j]:=0
        else d[i,j]:=100;
        v[i]:=100;
        end;
readln(p);
for i:=1 to p do
    begin
    readln(c,c2);
    v[ord(c)]:=c2;
    end;
readln(q);
for i:=1 to q do
    begin
    readln(c,c0,c1,c2);
    d[ord(c),ord(c1)]:=c2;
    d[ord(c1),ord(c)]:=c2;
    end;
i:=0;
repeat
read(c);
i:=i+1;
a[i]:=c;
until eoln;
la:=i;

i:=0;
repeat
read(c);
i:=i+1;
b[i]:=c;
until eoln;
lb:=i;

end;

procedure makeIt;
var j:integer;

function min(x,y,z:integer):integer;
var m:integer;
begin
m:=x;
if y<m
then m:=y;
if z<m
then m:=z;
min:=m;
end;

begin
for i:=2 to la do
    for j:=2 to lb do
        work[i,j]:=min(work[i-1,j-1]+d[ord(a[i]),ord(b[j])],work[i,j-1]+v[ord(b[j])],work[i-1,j]+v[ord(a[i])]);

end;

procedure make1line;
var flag:byte;
begin
flag:=100;
    for j:=1 to lb do
        begin
        if d[ord(a[1]),ord(b[j])]<flag
        then begin work[1,j]:=work[1,j-1]+100-flag;flag:=d[ord(a[1]),ord(b[j])];end
        else work[1,j]:=work[1,j-1]+v[ord(b[j])];
        end;
flag:=100;
    for j:=1 to la do
        begin
        if d[ord(b[1]),ord(a[j])]<flag
        then begin work[j,1]:=work[j-1,1]+100-flag;flag:=d[ord(a[1]),ord(b[j])];end
        else work[j,1]:=work[j-1,1]+v[ord(a[j])];
        end;
end;
begin
getinfo;
make1line;
makeIt;
writeln(work[la,lb]);
end.