var
p,k,i,j,m,n:longint;
a:array [1..200,1..200] of longint;
f:array [0..200,1..40] of longint;
data:array[1..200] of char;
zi:array[1..6] of string;
nu:array[1..6] of longint;
function work(s,len:longint):string;
var
i:longint;
begin
work:='';
for i:=1 to len do
work:=work+data[s+i-1];
end;
function find(s,l:longint):longint;
var
i:longint;
now:string;
begin
find:=0;
if s<=l then
begin
for i:= 1 to n do
begin
if l+1-s>=nu[i] then
begin
now:=work(s,nu[i]);
if now=zi[i] then
begin
find:=find(s+1,l)+1;
exit;
end;
end;
end;
find:=find(s+1,l);
end;
end;
begin
readln(p,k);
for i:=1 to p do
begin
for j:=1 to 20 do
read(data[i*20+j-20]);
readln;
end;
readln(n);
for i:= 1 to n do
begin
readln(zi[i]);
nu[i]:=length(zi[i]);
end;
p:=p*20;
for i:=1 to p do
for j:=i to p do
a[i,j]:=find(i,j);
for i:= 0 to p do
for j:=1 to k do
f[i,j]:=-1;
f[0,1]:=0;
for i:=1 to p do
f[i,1]:=a[1,i];
for m:=2 to k do
for j:=1 to p do
for i:= j-1 downto 0 do
begin
if f[j,m]< f[i,m-1]+a[i+1,j] then
f[j,m]:=f[i,m-1]+a[i+1,j];
end;
writeln(f[p,k]);
end.