#include<iostream>
using namespace std;
int f[2000][2000];
int p,k,len,n;
int word_num[2000][2000];
string word[2000];
string s1="";
int check_(string s){
for(int i=1;i<=n;i++){
if(word[i]==s){
return 1;
}
}
return 0;
}
int main(){
cin>>p>>k;
string s;
for(int i=1;i<=p;i++){
cin>>s;
s1+=s;
}
int len=s1.length();
cin>>n;
for(int i=1;i<=n;i++){
cin>>word[i];
}
for(int i=1;i<=len;i++){
word_num[i][i]=check_(s1.substr(i-1,1));
}
for(int i=1;i<=len;i++){
for(int j=i+1;j<=len;j++){
for(int l=i;l<=j-1;l++){
word_num[i][j]=max(word_num[i][j],word_num[i][l]+check_(s1.substr(l,j-l)));
}
}
}
for(int i=1;i<=len;i++){
for(int j=1;j<=min(k,i-1);j++){
if(j==1){
f[i][j]=word_num[1][i];
}else{
for(int l=1;l<=i-1;l++){
f[i][j]=max(f[i][j],f[l][j-1]+word_num[l+1][i]);
}
}
}
}
cout<<f[len][k]<<endl;
}