#include <bits/stdc++.h>
#define ll long long
using namespace std;
const ll MOD = 1e9 + 7;
const int N = 1e5 + 7;
const int M = 1e3 + 7;
int n, m, k;
string a, b;
ll fact[M], hash_A[M], hash_B[111], cnt_B_2[N], dp[111][111], cnt[111][111];
void sub1() {
ll ans = 0;
for (int i = 1; i <= n - m + 1; i++) {
bool same = true;
for (int j = 1; j <= m; j++) {
if (a[i + j - 1] != b[j]) {
same = false;
break;
}
}
if (same == true) ans++;
}
cout << ans % MOD << '\n';
}
ll get_Hash_A(int l, int r) {
return (hash_A[r] - hash_A[l - 1] * fact[r - l + 1] + MOD * MOD) % MOD;
}
ll get_Hash_B(int l, int r) {
return (hash_B[r] - hash_B[l - 1] * fact[r - l + 1] + MOD * MOD) % MOD;
}
void sub2() {
ll ans = 0, base = 313;
hash_A[0] = hash_B[0] = fact[0] = 1;
for (int i = 1; i <= n; i++) {
hash_A[i] = (hash_A[i - 1] * base + a[i] - 'a' + 1) % MOD;
fact[i] = (fact[i - 1] * base) % MOD;
}
for (int i = 1; i <= m; i++) {
hash_B[i] = (hash_B[i - 1] * base + b[i] - 'a' + 1) % MOD;
}
for (int len1 = 1; len1 < m; len1++) {
int len2 = m - len1;
ll hash_B_1 = get_Hash_B(1, len1), hash_B_2 = get_Hash_B(len1 + 1, m);
memset(cnt_B_2, 0, sizeof(cnt_B_2));
for (int i = n - len2 + 1; i >= 1; i--) {
cnt_B_2[i] = cnt_B_2[i + 1];
if (get_Hash_A(i, i + len2 - 1) == hash_B_2) cnt_B_2[i]++;
}
for (int i = 1; i <= n - len1 + 1;i++) {
if ((i + len1 <= n) && (get_Hash_A(i, i + len1 - 1) == hash_B_1)) {
ans = (ans + cnt_B_2[i + len1]) % MOD;
}
}
}
cout << ans << '\n';
}
void sub34() {
dp[0][0] = 1;
for (int i = 1; i <= n; i++) {
for (int j = m; j >= 1; j--) {
if (a[i] == b[j]) {
for (int t = 1; t <= k; t++) {
cnt[t][j] = (cnt[t][j - 1] + dp[t - 1][j - 1]) % MOD;
dp[t][j] = (dp[t][j] + cnt[t][j]) % MOD;
}
}else for (int t = 1; t <= k; t++) cnt[t][j] = 0;
}
}
cout << dp[k][m] << '\n';
}
signed main() {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
freopen("CHONXAU.inp", "r", stdin);
freopen("CHONXAU.out", "w", stdout);
cin >> n >> m >> k;
cin >> a >> b;
a = " " + a;
b = " " + b;
if ((k == 1) && (n <= 1000) && (m <= 100)) sub1();
else if ((k == 2) && (n <= 1000) && (m <= 100)) sub2();
else sub34();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgbGwgbG9uZyBsb25nCgp1c2luZyBuYW1lc3BhY2Ugc3RkOwpjb25zdCBsbCBNT0QgPSAxZTkgKyA3Owpjb25zdCBpbnQgTiA9IDFlNSArIDc7CmNvbnN0IGludCBNID0gMWUzICsgNzsKCmludCBuLCBtLCBrOwpzdHJpbmcgYSwgYjsKbGwgZmFjdFtNXSwgaGFzaF9BW01dLCBoYXNoX0JbMTExXSwgY250X0JfMltOXSwgZHBbMTExXVsxMTFdLCBjbnRbMTExXVsxMTFdOwoKdm9pZCBzdWIxKCkgewogICAgbGwgYW5zID0gMDsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG4gLSBtICsgMTsgaSsrKSB7CiAgICAgICAgYm9vbCBzYW1lID0gdHJ1ZTsKICAgICAgICBmb3IgKGludCBqID0gMTsgaiA8PSBtOyBqKyspIHsKICAgICAgICAgICAgaWYgKGFbaSArIGogLSAxXSAhPSBiW2pdKSB7CiAgICAgICAgICAgICAgICBzYW1lID0gZmFsc2U7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoc2FtZSA9PSB0cnVlKSBhbnMrKzsKICAgIH0KICAgIGNvdXQgPDwgYW5zICUgTU9EIDw8ICdcbic7Cn0KCmxsIGdldF9IYXNoX0EoaW50IGwsIGludCByKSB7CiAgICByZXR1cm4gKGhhc2hfQVtyXSAtIGhhc2hfQVtsIC0gMV0gKiBmYWN0W3IgLSBsICsgMV0gKyBNT0QgKiBNT0QpICUgTU9EOwp9CgpsbCBnZXRfSGFzaF9CKGludCBsLCBpbnQgcikgewogICAgcmV0dXJuIChoYXNoX0Jbcl0gLSBoYXNoX0JbbCAtIDFdICogZmFjdFtyIC0gbCArIDFdICsgTU9EICogTU9EKSAlIE1PRDsKfQoKdm9pZCBzdWIyKCkgewogICAgbGwgYW5zID0gMCwgYmFzZSA9IDMxMzsKICAgIGhhc2hfQVswXSA9IGhhc2hfQlswXSA9IGZhY3RbMF0gPSAxOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSB7CiAgICAgICAgaGFzaF9BW2ldID0gKGhhc2hfQVtpIC0gMV0gKiBiYXNlICsgYVtpXSAtICdhJyArIDEpICUgTU9EOwogICAgICAgIGZhY3RbaV0gPSAoZmFjdFtpIC0gMV0gKiBiYXNlKSAlIE1PRDsKICAgIH0KICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG07IGkrKykgewogICAgICAgIGhhc2hfQltpXSA9IChoYXNoX0JbaSAtIDFdICogYmFzZSArIGJbaV0gLSAnYScgKyAxKSAlIE1PRDsKICAgIH0KICAgIGZvciAoaW50IGxlbjEgPSAxOyBsZW4xIDwgbTsgbGVuMSsrKSB7CiAgICAgICAgaW50IGxlbjIgPSBtIC0gbGVuMTsKICAgICAgICBsbCBoYXNoX0JfMSA9IGdldF9IYXNoX0IoMSwgbGVuMSksIGhhc2hfQl8yID0gZ2V0X0hhc2hfQihsZW4xICsgMSwgbSk7CiAgICAgICAgbWVtc2V0KGNudF9CXzIsIDAsIHNpemVvZihjbnRfQl8yKSk7CiAgICAgICAgZm9yIChpbnQgaSA9IG4gLSBsZW4yICsgMTsgaSA+PSAxOyBpLS0pIHsKICAgICAgICAgICAgY250X0JfMltpXSA9IGNudF9CXzJbaSArIDFdOwogICAgICAgICAgICBpZiAoZ2V0X0hhc2hfQShpLCBpICsgbGVuMiAtIDEpID09IGhhc2hfQl8yKSBjbnRfQl8yW2ldKys7CiAgICAgICAgfQogICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG4gLSBsZW4xICsgMTtpKyspIHsKICAgICAgICAgICAgaWYgKChpICsgbGVuMSA8PSBuKSAmJiAoZ2V0X0hhc2hfQShpLCBpICsgbGVuMSAtIDEpID09IGhhc2hfQl8xKSkgewogICAgICAgICAgICAgICAgYW5zID0gKGFucyArIGNudF9CXzJbaSArIGxlbjFdKSAlIE1PRDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIGNvdXQgPDwgYW5zIDw8ICdcbic7Cn0KCnZvaWQgc3ViMzQoKSB7CiAgICBkcFswXVswXSA9IDE7CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIHsKICAgICAgICBmb3IgKGludCBqID0gbTsgaiA+PSAxOyBqLS0pIHsKICAgICAgICAgICAgaWYgKGFbaV0gPT0gYltqXSkgewogICAgICAgICAgICAgICAgZm9yIChpbnQgdCA9IDE7IHQgPD0gazsgdCsrKSB7CiAgICAgICAgICAgICAgICAgICAgY250W3RdW2pdID0gKGNudFt0XVtqIC0gMV0gKyBkcFt0IC0gMV1baiAtIDFdKSAlIE1PRDsKICAgICAgICAgICAgICAgICAgICBkcFt0XVtqXSA9IChkcFt0XVtqXSArIGNudFt0XVtqXSkgJSBNT0Q7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH1lbHNlIGZvciAoaW50IHQgPSAxOyB0IDw9IGs7IHQrKykgY250W3RdW2pdID0gMDsKICAgICAgICB9CiAgICB9CiAgICBjb3V0IDw8IGRwW2tdW21dIDw8ICdcbic7Cn0KCnNpZ25lZCBtYWluKCkgewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsKICAgIGNpbi50aWUoMCk7IGNvdXQudGllKDApOwoKICAgIGZyZW9wZW4oIkNIT05YQVUuaW5wIiwgInIiLCBzdGRpbik7CiAgICBmcmVvcGVuKCJDSE9OWEFVLm91dCIsICJ3Iiwgc3Rkb3V0KTsKCiAgICBjaW4gPj4gbiA+PiBtID4+IGs7CiAgICBjaW4gPj4gYSA+PiBiOwogICAgYSA9ICIgIiArIGE7CiAgICBiID0gIiAiICsgYjsKICAgIGlmICgoayA9PSAxKSAmJiAobiA8PSAxMDAwKSAmJiAobSA8PSAxMDApKSBzdWIxKCk7CiAgICBlbHNlIGlmICgoayA9PSAyKSAmJiAobiA8PSAxMDAwKSAmJiAobSA8PSAxMDApKSBzdWIyKCk7CiAgICBlbHNlIHN1YjM0KCk7CiAgICByZXR1cm4gMDsKfQo=