#include <iostream>
#include <vector>
using namespace std;
typedef long long ll;
const int N = 1E2 + 10,M = 1E2 + 10;//记得改
const ll mod = 1000000007;
ll n,m,k,summ,j;
string a,b;
ll chk[N][M][M][2];
vector <int> number;
ll dfs(ll a_i,ll b_i,ll use_k,bool lastk){
if (chk[a_i][b_i][use_k][lastk]){
return chk[a_i][b_i][use_k][lastk];
}
if (b_i > m && use_k == 1){
// cout << '*';
// for (int i = 0;i < (int)number.size();i++){
// cout << number[i] << ' ';
// }
// cout << '\n';
return chk[a_i][b_i][use_k][lastk] = 1;
}
ll sum = 0;
if (use_k > 1 && lastk){
for (ll i = a_i;i <= n;i++){/*n - i >= m - b_i*/ /**/
if (a[i] == b[b_i]){
number.push_back(0);
number.push_back(i);
// cout << '{' << i << '}';
sum = (sum + dfs(i + 1,b_i + 1,use_k - 1,1)) % mod;
number.pop_back();
number.pop_back();
}
}
}
if (a[a_i] == b[b_i]){
number.push_back(a_i);
sum = (sum + dfs(a_i + 1,b_i + 1,use_k,1)) % mod;
number.pop_back();
}
return chk[a_i][b_i][use_k][lastk] = max(chk[a_i][b_i][use_k][lastk],sum),chk[a_i][b_i][use_k][lastk] % mod;
}
int main(){
cin >> n >> m >> k;
for (int i = 1;i <= n;i++)cin >> a[i];
for (int i = 1;i <= m;i++)cin >> b[i];
for (j = 1;j <= n;j++){
// cout << '[' << j << ']' << dfs(j,1,k,0) << ' ';
summ += dfs(j,1,k,0);
}
cout << summ << '\n';
system("pause");
return 0;
}