#include<bits/stdc++.h>
#define MOD 1000000007
using namespace std;
__int128 dna[100001][5][2];int l[5],n,m,k;
struct pHASH{
__int128 operator()(pair<int,pair<__int128,__int128> > p)const{
return p.first^(p.second.first<<28)^p.second.second;
}
__int128 operator()(pair<__int128,__int128> p)const{
return p.first^(p.second<<28);
}
};
unordered_map<pair<int,pair<__int128,__int128> >,int,pHASH> mp;
unordered_set<pair<__int128,__int128>,pHASH> vis;
long long search(int i,int le,__int128 val0,__int128 val1){
if(i+le>n||(i==n&&le!=0))return 0;
if(le==0)return 1;
long long r=mp[make_pair(i,make_pair(val0,val1))];
return ((i+le<n)?(r?r*search(i+1,le-1,val0,val1)%MOD:0)+search(i+1,le,val0,val1):(r?r*search(i+1,le-1,val0,val1):0))%MOD;
}
signed main(){
scanf("%d%d%d",&n,&m,&k);
for(int i=0;i<n;i++){
__int128 M=(((__int128)1)<<k)-1;
char c=getchar();
while(c!='A'&&c!='C'&&c!='G'&&c!='T')c=getchar();
while(c=='A'||c=='C'||c=='G'||c=='T'){
switch(c){
case 'A':
dna[l[i]+1][i][0]=((dna[l[i]][i][0]<<1)+1)&M;
dna[l[i]+1][i][1]=((dna[l[i]][i][1]<<1)+1)&M;
break;
case 'T':
dna[l[i]+1][i][0]=((dna[l[i]][i][0]<<1)+1)&M;
dna[l[i]+1][i][1]=(dna[l[i]][i][1]<<1)&M;
break;
case 'G':
dna[l[i]+1][i][0]=(dna[l[i]][i][0]<<1)&M;
dna[l[i]+1][i][1]=((dna[l[i]][i][1]<<1)+1)&M;
break;
case 'C':
dna[l[i]+1][i][0]=(dna[l[i]][i][0]<<1)&M;
dna[l[i]+1][i][1]=(dna[l[i]][i][1]<<1)&M;
break;
}
c=getchar();l[i]++;
}
}
for(int i=0;i<n;i++)for(int j=k;j<=l[i];j++)mp[make_pair(i,make_pair(dna[j][i][0],dna[j][i][1]))]=(mp[make_pair(i,make_pair(dna[j][i][0],dna[j][i][1]))]+1)%MOD;
long long ans=0;
for(int be=0;be+m<=n;be++)for(int i=k;i<=l[be];i++)if(vis.find(make_pair(dna[i][be][0],dna[i][be][1]))==vis.end()){
vis.insert(make_pair(dna[i][be][0],dna[i][be][1]));
ans=(ans+search(be,m,dna[i][be][0],dna[i][be][1]))%MOD;
}
printf("%lld",ans);
return 0;
}