#include<bits/stdc++.h>
using namespace std;
struct zi
{
short l,r;
int lt;
}d[2000009];
int head[1009];
int top;
void mkb(int x,short l,short r)
{
top++;
d[top].l=l;
d[top].r=r;
d[top].lt=head[x];
head[x]=top;
}
const int mod=1e9+7;
short n,m,k;
int f[1002][202][2];
string a,b;
int main()
{
cin>>n>>m>>k;
cin>>a>>b;
for(short i=1;i<=n;i++)
for(short j=1;j<=m;j++)
{
string s1="",s2="";
for(short len=1;i+len-1<=n&&j+len-1<=m;len++)
{
s1+=a[i+len-2];
s2+=b[j+len-2];
if(s1==s2)
mkb(i,j,j+len-1);
else
break;
}
}
for(short i=0;i<=n;i++)
f[i][0][0]=1;
for(short x=1;x<=k;x++)
{
for(short i=0;i<=n;i++)
for(short j=0;j<=m;j++)
f[i][j][x%2]=0;
for(short i=1;i<=n;i++)
{
for(short j=1;j<=m;j++)
f[i][j][x%2]=(f[i][j][x%2]+f[i-1][j][x%2])%mod;
for(int opt=head[i];opt;opt=d[opt].lt)
{
short j=i+d[opt].r-d[opt].l;
f[j][d[opt].r][x%2]=(f[j][d[opt].r][x%2]+f[i-1][d[opt].l-1][(x+1)%2])%mod;
}
}
}
cout<<f[n][m][k%2];
return 0;
}
理论上复杂度可以卡到O(nm^2 k)。
但是过去了。。。