#include <bits/stdc++.h>
using namespace std;
int p,n,m,lss;
string ss,s[7];
long long f[205][205],ans;
void dfs(int dep,int sta,long long val){
if(dep=n){
ans=max(ans,val+f[sta][lss-1]);
return;
}
for(int l=1;l<=lss-sta-(n-dep);l++){
dfs(dep+1,sta+l,val+f[sta][sta+l-1]);
}
}
int main()
{
cin>>p>>n;
string sx;
for(int i=1;i<=p;i++){
cin>>sx;
ss+=sx;
}
lss=ss.length();
cin>>m;
for(int i=1;i<=m;i++)cin>>s[i];
sort(s+1,s+m+1);
for(int l=1;l<=20*p;l++)
{
for(int i=20*p-l;i>=0;i--)
{
int j=i+l-1;
f[i][j]+=f[i+1][j];
for(int k=1;k<=m;k++){
int len=s[k].length();
if(ss.substr(i,len)==s[k]){
f[i][j]++;
break;
}
}
}
}
dfs(1,0,0);
cout<<ans<<endl;
return 0;
}