#include <bits/stdc++.h>
using namespace std;
pair<int, int> v[1000005];
int n, m;
long long k;
int nt[1005];
long long dp[1005][1005], add[1005][1005];
int LCP[1005][1005];
char s[1005];
bool cmp(const pair<int, int> &a, const pair<int, int> &b) {
  int lcp = LCP[a.first][b.first];
  lcp = min(lcp, a.second - a.first + 1);
  lcp = min(lcp, b.second - b.first + 1);
  if (lcp == a.second - a.first + 1) return true;
  if (lcp == b.second - b.first + 1) return false;
  return s[a.first + lcp] <= s[b.first + lcp];
}
long long solve(int mid) {
  for (int i = 1; i <= n; i++) {
    nt[i] = -1;
    for (int j = i; j <= n; j++) {
      if (cmp(v[mid], make_pair(i, j)) == true) {
        nt[i] = j;
        break;
      }
    }
  }
  for (int j = 1; j <= m; j++) {
    for (int i = 1; i <= n; i++) {
      dp[j][i] = 0;
      add[j][i] = 0;
    }
  }
  dp[0][0] = 1;
  for (int j = 1; j <= m; j++) {
    for (int i = 1; i <= n; i++) {
      if (nt[i] != -1)
        add[j][nt[i]] = min((long long)2e18, add[j][nt[i]] + dp[j - 1][i - 1]);
      add[j][i] = min((long long)2e18, add[j][i] + add[j][i - 1]);
      dp[j][i] = min((long long)2e18, dp[j][i] + add[j][i]);
    }
  }
  return dp[m][n];
}
int main() {
  scanf("%d%d%lld", &n, &m, &k);
  scanf("%s", s + 1);
  for (int i = n; i >= 1; i--) {
    for (int j = n; j >= 1; j--) {
      if (s[i] == s[j])
        LCP[i][j] = LCP[i + 1][j + 1] + 1;
      else
        LCP[i][j] = 0;
    }
  }
  int tot = 0;
  for (int i = 1; i <= n; i++)
    for (int j = i; j <= n; j++) v[++tot] = make_pair(i, j);
  sort(v + 1, v + 1 + tot, cmp);
  int lo = 1, hi = tot, ans;
  while (lo <= hi) {
    int mid = (lo + hi) / 2;
    if (solve(mid) >= k)
      ans = mid, lo = mid + 1;
    else
      hi = mid - 1;
  }
  for (int i = v[ans].first; i <= v[ans].second; i++) printf("%c", s[i]);
  printf("\n");
}
