#include <bits/stdc++.h>
#define ll long long
using namespace std;
const ll mod = 1e9 + 7;
const int nmax = 100000 + 5;
ll n, m, k;
string a, b;
/* ================= SUB 1 ================= */
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) ans++;
}
cout << ans % mod << '\n';
}
/* ================= SUB 2 ================= */
ll fact[nmax], hash_a[nmax], hash_b[nmax], cnt_b2[nmax];
ll base = 313;
ll get_hash_a(ll l, ll r) {
return (hash_a[r] - hash_a[l - 1] * fact[r - l + 1] + mod * mod) % mod;
}
ll get_hash_b(ll l, ll r) {
return (hash_b[r] - hash_b[l - 1] * fact[r - l + 1] + mod * mod) % mod;
}
void sub2() {
ll ans = 0;
fact[0] = hash_a[0] = hash_b[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_b1 = get_hash_b(1, len1);
ll hash_b2 = get_hash_b(len1 + 1, m);
memset(cnt_b2, 0, sizeof cnt_b2);
for (int i = n - len2 + 1; i >= 1; i--) {
cnt_b2[i] = cnt_b2[i + 1];
if (get_hash_a(i, i + len2 - 1) == hash_b2)
cnt_b2[i]++;
}
for (int i = 1; i <= n - len1 + 1; i++) {
if (i + len1 <= n && get_hash_a(i, i + len1 - 1) == hash_b1)
ans = (ans + cnt_b2[i + len1]) % mod;
}
}
cout << ans << '\n';
}
/* ================= SUB 3 ================= */
ll dp1[105][105], cnt1[105][105];
void sub3() {
dp1[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++) {
cnt1[t][j] = (cnt1[t][j - 1] + dp1[t - 1][j - 1]) % mod;
dp1[t][j] = (dp1[t][j] + cnt1[t][j]) % mod;
}
} else for (int t = 1; t <= k; t++) cnt1[t][j] = 0;
}
}
cout << dp1[k][m] << '\n';
}
/* ================= SUB 4 ================= */
ll dp2[25][25], cnt2[25][25];
void sub4() {
dp2[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++) {
cnt2[t][j] = cnt2[t][j - 1] + dp2[t - 1][j - 1];
if (cnt2[t][j] >= mod) cnt2[t][j] -= mod;
dp2[t][j] = dp2[t][j] + cnt2[t][j];
if (dp2[t][j] >= mod) dp2[t][j] -= mod;
}
} else for (int t = 1; t <= k; t++) cnt2[t][j] = 0;
}
}
cout << dp2[k][m] << '\n';
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
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 if (k >= 3 && n <= 1000 && m <= 100) sub3();
else if (k >= 3 && n <= 100000 && m <= 20) sub4();
return 0;
}