#include <bits/stdc++.h>
using namespace std;
const int M = 1010;
int dp[2][M][M][2], n, m, k;
void inc(int& x, int y) {
  if (x < y) x = y;
}
char s[M], t[M];
int main() {
  scanf("%d%d%d%s%s", &n, &m, &k, s + 1, t + 1);
  for (int iter = 1; iter <= k; iter++) {
    int now = iter & 1, pre = 1 - now;
    memset(dp[now], 0, sizeof dp[now]);
    for (int i = 0; i <= n; i++) {
      for (int j = 0; j <= m; j++) {
        if (i > 0) {
          inc(dp[now][i][j][0],
              max(dp[now][i - 1][j][0], dp[now][i - 1][j][1]));
        }
        if (j > 0) {
          inc(dp[now][i][j][0],
              max(dp[now][i][j - 1][0], dp[now][i][j - 1][1]));
        }
        if (i > 0 && j > 0 && s[i] == t[j]) {
          inc(dp[now][i][j][1],
              max(dp[pre][i - 1][j - 1][0], dp[pre][i - 1][j - 1][1]) + 1);
          inc(dp[now][i][j][1], dp[now][i - 1][j - 1][1] + 1);
        }
      }
    }
  }
  printf("%d\n", max(dp[k & 1][n][m][0], dp[k & 1][n][m][1]));
}
