#include<bits/stdc++.h>
using namespace std;
int tot,n,k,trie[300][3],dp[1005][300],fail[310],ans,cnt[310];
char s[20];
void insert(char *s,int l) {
int p=0;
for(int i=0; i<l; ++i) {
int c=s[i]-'A';
if(trie[p][c]==0)trie[p][c]=++tot;
p=trie[p][c];
}
++cnt[p];
}
void fail1() {
int u=0;
queue<int> q;
for(int i=0; i<3; ++i) {
if(trie[0][i]!=0)q.push(trie[0][i]);
}
while(!q.empty()) {
u=q.front();
q.pop();
for(int i=0; i<3; ++i) {
if(trie[u][i]) {
fail[trie[u][i]]=trie[fail[u]][i];
q.push(trie[u][i]);
} else trie[u][i]=trie[fail[u]][i];
cnt[u]+=cnt[fail[u]];
}
}
}
void acye(int k) {
memset(dp,0xaf,sizeof(dp));
for(int i=0;i<=k;i++){
dp[i][0]=0;
}
for(int i=1;i<=k;++i) {
for(int j=0;j<=tot;++j){
for(int opt=0;opt<3;++opt){
dp[i][trie[j][opt]]=max(dp[i-1][j]+cnt[trie[j][opt]],dp[i][trie[j][opt]]);
}
}
}
for(int i=0; i<=tot; i++)ans=max(ans,dp[k][i]);
printf("%d",ans);
}
int main() {
scanf("%d%d",&n,&k);
while(n--){
scanf("%s",s);
insert(s,strlen(s));
}
fail1();
acye(k);
return 0;
}