var a,fa:array[0..10000] of longint;
b:array[0..10000] of boolean;
c:array['a'..'z'] of char;
s1,s2:string;
n,m,i,j,k,dx,dy,sum:longint;
function find(x:longint):longint;
begin
if fa[x]<>x then fa[x]:=find(fa[x]);
exit(fa[x]);
end;
procedure init;
begin
readln(s1); readln(s2);
for i:=1 to 26 do
c[s1[i]]:=s2[i];
readln(n,m);
for i:=1 to m do
begin
readln(s1);
val(copy(s1,1,pos(' ',s1)-1),j);
delete(s1,1,pos(' ',s1));
for k:=1 to length(s1) do
s1[k]:=c[s1[k]];
if pos('poison',s1)<>0 then
b[j]:=true;
end;
end;
begin
{assign(input,'p1323.in'); assign(output,'p1323.out');
reset(input); rewrite(output);}
fillchar(b,sizeof(b),0);
init;
readln(sum);
for i:=1 to n do
fa[i]:=i;
for i:=1 to sum do
begin
readln(j,k);
dx:=find(j); dy:=find(k);
fa[dx]:=dy;
if b[dx] then b[dy]:=true;
end;
sum:=0;
for i:=1 to n do
if not b[find(i)] then inc(sum);
writeln(sum);
{close(input); close(output);}
end.