#include <bits/stdc++.h>
using namespace std;
int p,k,ge;
int d[210][210],dp[210][210][45];
string s;
string a[10];
inline int read(){
int t=0,f=1;
register char c=getchar();
while(c<48||c>57) f=(c=='-')?(-1):(f),c=getchar();
while(c>=48&&c<=57) t=(t<<1)+(t<<3)+(c^48),c=getchar();
return f*t;
}
int qiu(int x,int y){
int res=0;
if(x==y){
for(int i=1;i<=ge;i++){
if(a[i].size()==1&&a[i][0]==s[x]) res++;
}
return res;
}
string ss=s.substr(x,y-x+1);
for(int i=1;i<=ge;i++){
if(ss.find(a[i])==0) res++;
}
return res;
}
int main(){
p=read(),k=read();
s="";
for(int i=1;i<=p;i++){
for(int j=(i-1)*20+1;j<=i*20;j++){
char c;
cin>>c;
s=s+c;
}
}
ge=read();
for(int i=1;i<=ge;i++) cin>>a[i];
for(int i=s.size()-1;i>=0;i--){
for(int j=i;j>=0;j--){
d[j][i]=qiu(j,i)+d[j+1][i];
dp[j][i][1]=d[j][i];
}
}
for(int len=2;len<=k;len++){
for(int zuo=0;zuo<=s.size()-len+1;zuo++){
for(int you=s.size()-1;you>=zuo+len-1;you--){
for(int i=you-1;i>=zuo+len-2;i--){
dp[zuo][you][len]=max(dp[zuo][you][len],dp[zuo][i][len-1]+dp[i+1][you][1]);
}
}
}
}
cout<<dp[0][s.size()-1][k]<<endl;
return 0;
}