#include <bits/stdc++.h>
const int maxn = 1e3 + 5;
using namespace std;
int rd() {
  int x = 0, f = 1;
  char c = getchar();
  while (!isdigit(c)) {
    if (c == '-') f = -1;
    c = getchar();
  }
  while (isdigit(c)) x = (x << 3) + (x << 1) + c - '0', c = getchar();
  return x * f;
}
int n, m, lcp[maxn][maxn], top, L = 1, R;
long long k, f[maxn][maxn], sum[maxn][maxn];
char s[maxn];
pair<int, int> a[maxn * maxn];
bool tmp(const pair<int, int> &x, const pair<int, int> &y) {
  int len = lcp[x.first][y.first];
  if (len >= x.second - x.first + 1 || len >= y.second - y.first + 1)
    return x.second - x.first < y.second - y.first;
  return s[x.first + len] < s[y.first + len];
}
bool check(int mid) {
  memset(f, 0, sizeof(f));
  memset(sum, 0, sizeof(sum));
  sum[n + 1][0] = 1;
  int len = a[mid].second - a[mid].first + 1;
  for (int i = n; i >= 1; i--) {
    int t = min(len, lcp[a[mid].first][i]);
    if (t == len || s[i + t] > s[a[mid].first + t])
      for (int j = 1; j <= m; j++) f[i][j] = sum[i + t + 1][j - 1];
    for (int j = 0; j <= m; j++) sum[i][j] = min(sum[i + 1][j] + f[i][j], k);
  }
  return f[1][m] >= k;
}
int main() {
  n = rd();
  m = rd();
  scanf("%lld", &k);
  scanf("%s", s + 1);
  for (int i = n; i >= 1; i--)
    for (int j = n; j >= 1; j--)
      lcp[i][j] = (s[i] == s[j]) ? lcp[i + 1][j + 1] + 1 : 0;
  for (int i = 1; i <= n; i++)
    for (int j = i; j <= n; j++) a[++top] = make_pair(i, j);
  sort(a + 1, a + top + 1, tmp);
  R = top;
  while (L < R) {
    int mid = (L + R + 1) >> 1;
    if (check(mid))
      L = mid;
    else
      R = mid - 1;
  }
  L++;
  for (int i = a[L].first; i <= a[L].second; i++) putchar(s[i]);
  return 0;
}
