// Source code from laekov at noip 2015 day2
#define PRID “substring”
#include
using namespace std;
const int maxa = 2003; const int maxb = 203; const int mod = 1e9 + 7;
int n, m, l, f[2][maxb][maxb][2]; char a[maxa], b[maxb];
#define mInc(a,b) {
a += b;
if (a >= mod)
a -= mod;
}
int main() { freopen(PRID “.in”, “r”, stdin); freopen(PRID “.out”, “w”, stdout);
scanf("%d%d%d", &n, &m, &l);
scanf("%s%s", a, b);
memset(f, 0, sizeof(f));
int cur(0), prv(1);
f[cur][0][0][0] = 1;
for (int i = 0; i < n; ++ i) {
swap(cur, prv);
memset(f[cur], 0, sizeof(f[cur]));
for (int j = 0; j <= m; ++ j) {
for (int k = 0; k <= j && k <= l; ++ k) {
if (f[prv][j][k][0])
mInc(f[cur][j][k][0], f[prv][j][k][0]);
if (f[prv][j][k][1])
mInc(f[cur][j][k][0], f[prv][j][k][1]);
}
if (j < m && a[i] == b[j]) {
for (int k = 0; k <= j && k <= l; ++ k) {
if (f[prv][j][k][0] && k < l)
mInc(f[cur][j + 1][k + 1][1], f[prv][j][k][0]);
if (f[prv][j][k][1]) {
if (k < l)
mInc(f[cur][j + 1][k + 1][1], f[prv][j][k][1]);
mInc(f[cur][j + 1][k][1], f[prv][j][k][1]);
}
}
}
}
}
printf("%d\n", (f[cur][m][l][0] + f[cur][m][l][1])% mod);
}