#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;
}