#include <bits/stdc++.h>
#define MAXN 1001
using namespace std;
int f[MAXN][MAXN];
int b[MAXN][MAXN];
int a[MAXN][MAXN];
string c[MAXN];
int p,m,n;
string s = "";
bool check(int l,int r)
{
string x = s.substr(l,r - l + 1);
for (int i = 1;i <= n;i++)
{
if (x == c[i])
{
return true;
}
}
return false;
}
int main()
{
cin >> p >> m;
for (int i = 1;i <= p;i++)
{
string ch;
cin >> ch;
s += ch;
}
cin >> n;
for (int i = 1;i <= n;i++)
{
cin >> c[i];
}
for (int i = 0;i < s.size();i++)
{
for (int j = i;j < s.size();j++)
{
if (check(i,j))
{
b[i][j]++;
}
}
}
for (int i = 0;i < s.size();i++)
{
for (int j = 0;j < s.size();j++)
{
if (b[i][j] == 0)
{
continue;
}
for (int k = 0;k <= i;k++)
{
for (int l = j;l < s.size();l++)
{
a[k][l]++;
}
}
}
}
for (int i = 0;i < s.size();i++)
{
for (int j = 0;j < i;j++)
{
a[i][j] = 0;
}
}
memset(f,0,sizeof(f));
for (int i = 0;i < s.size();i++)
{
f[i][0] = a[0][i];
}
for (int i = 1;i < m;i++)
{
f[i][i] = f[i - 1][i - 1] + a[i][i];
}
for (int j = 1;j < m;j++)
{
for (int i = 0;i < s.size();i++)
{
for (int k = j;k < i;k++)
{
f[i][j] = max(f[i][j],f[k][j - 1] + a[k + 1][i]);
}
}
}
cout << f[s.size() - 1][m - 1];
return 0;
}