#include <bits/stdc++.h>
using namespace std;
void setIO(string str, bool dbg) {
  ios_base::sync_with_stdio(0);
  cin.tie(nullptr);
  cout.tie(nullptr);
  if (!dbg) {
    freopen((str + ".in").c_str(), "r", stdin);
    freopen((str + ".out").c_str(), "w", stdout);
  }
}
const int MAX = 1e3 + 5;
const int LEN = 1e1 + 1;
const int LVL = 2e1 + 0;
const long long int MOD = 1e9 + 7;
const long long int INF = 2e9;
int xyz = 1;
int n, m, l;
int dps[LEN][MAX][MAX][2];
string s;
string t;
void fnc() {
  cin >> n >> m >> l;
  cin >> s >> t;
  int ans = 0;
  for (int k = 1; k <= l; k++) {
    for (int i = 1; i <= n; i++) {
      for (int j = 1; j <= m; j++) {
        for (int p = 0; p <= 1; p++) {
          dps[k][i][j][0] = max(dps[k][i][j][0], dps[k][i - 1][j][0]);
          dps[k][i][j][0] = max(dps[k][i][j][0], dps[k][i - 1][j][1]);
          dps[k][i][j][0] = max(dps[k][i][j][0], dps[k][i][j - 1][0]);
          dps[k][i][j][0] = max(dps[k][i][j][0], dps[k][i][j - 1][1]);
          if (s[i - 1] == t[j - 1]) {
            dps[k][i][j][1] =
                max(dps[k][i][j][1], 1 + dps[k - 0][i - 1][j - 1][1]);
            dps[k][i][j][1] =
                max(dps[k][i][j][1], 1 + dps[k - 1][i - 1][j - 1][0]);
          }
          ans = max(ans, dps[k][i][j][0]);
          ans = max(ans, dps[k][i][j][1]);
        }
      }
    }
  }
  cout << ans << "\n";
}
int main() {
  setIO("", 1);
  while (xyz--) fnc();
  return 0;
}
