#include <bits/stdc++.h>
using namespace std;
const long long INF = (long long)2e18;
const int N = 1005;
char s[N];
int lcp[N][N];
vector<pair<int, int>> segs;
bool cmp(pair<int, int> a, pair<int, int> b) {
  int alen = a.second - a.first;
  int blen = b.second - b.first;
  int clen = min(alen, blen);
  int com = lcp[a.first][b.first];
  if (com < clen) return s[a.first + com] < s[b.first + com];
  return alen < blen;
}
int n, m;
int mn[N];
long long dp[N][N];
void sadd(long long &a, long long b) {
  a += b;
  if (a >= INF) a = INF;
}
long long getCntGEQ(int id) {
  for (int i = 0; i < n; i++) mn[i] = n + 1;
  for (int i = id; i < (int)segs.size(); i++)
    mn[segs[i].first] = min(mn[segs[i].first], segs[i].second);
  memset(dp, 0, sizeof dp);
  dp[0][0] = 1;
  for (int i = 0; i < n; i++)
    for (int j = 0; j <= m; j++) {
      long long cur = dp[i][j];
      if (i != 0) sadd(dp[i + 1][j], cur);
      sadd(dp[mn[i]][j + 1], cur);
    }
  return dp[n][m];
}
void printStr(pair<int, int> p) {
  int l = p.first, r = p.second;
  for (int i = l; i < r; i++) printf("%c", s[i]);
  printf("\n");
}
int main(int, char **) {
  long long k;
  scanf("%d%d%lld", &n, &m, &k);
  scanf("%s", s);
  for (int i = n - 1; i >= 0; i--)
    for (int j = n - 1; j >= 0; j--)
      if (s[i] == s[j]) lcp[i][j] = 1 + lcp[i + 1][j + 1];
  for (int i = 0; i < n; i++)
    for (int j = i + 1; j <= n; j++) segs.emplace_back(i, j);
  sort(segs.begin(), segs.end(), cmp);
  int lb = -1, rb = (int)segs.size();
  while (rb - lb > 1) {
    int mb = (lb + rb) / 2;
    long long cur = getCntGEQ(mb);
    if (cur >= k)
      lb = mb;
    else
      rb = mb;
  }
  printStr(segs[lb]);
  return 0;
}
