#include<bits/stdc++.h>
using namespace std;
int p, k;
string s;
int n;
const int maxn = 200 + 10;
const int maxm = 40 + 10;
int dp[maxn][maxm];
int sum[maxn][maxn];
string m[10];
int len;
bool check(int l, int r)
{
string st = s.substr(l, r - l + 1);
for(int i = 1; i <= n; i++)
if(st.find(m[i]) == 0)
return true;
return false;
}
void find()
{
for(int i = len; i >= 1; i--)
{
for(int j = i; j >= 1; j--)
{
sum[j][i] = sum[j + 1][i];
if(check(j, i) == true)
sum[j][i]++;
}
}
}
void ans()
{
dp[0][0] = 0;
for(int i = 1; i <= len; i++)
{
dp[i][1] = sum[1][i];
}
for(int i = 1; i <= k; i++)
{
dp[i][i] = dp[i - 1][i - 1] + sum[i][i];
}
for(int i = 1; i <= len; i++)
{
for(int j = 1; j <= k && j < i; j--)
{
for(int l = j; l < i; l++)
{
dp[i][j] = max(dp[i][j], dp[l][j - 1] + sum[l + 1][i]);
}
}
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> p >> k;
s += '0';
for(int i = 0; i < p; i++)
{
string st;
cin >> st;
s += st;
}
cin >> n;
for(int i = 1; i <= n; i++)
{
cin >> m[i];
}
len = s.size() - 1;
find();
ans();
cout << dp[len][k];
return 0;
}