#include <bits/stdc++.h>
const int maxn = 1e3 + 19;
int n, m;
long long k;
char s[maxn], ans[maxn];
int next[maxn];
long long dp[2][maxn];
bool check(int l, int r) {
  for (int i = 1; i <= n; ++i) {
    int k = 0;
    while (i + k < n && l + k < r && s[i + k] == s[l + k]) ++k;
    if (s[i + k] == s[l + k])
      next[i] = (l + k == r) * (i + k);
    else if (s[i + k] < s[l + k])
      next[i] = 0;
    else
      next[i] = i + k;
  }
  dp[0][0] = 1;
  for (int i = 1; i <= n; ++i) dp[0][i] = 0;
  for (int i = 0; i < m; ++i) {
    for (int j = 0; j <= n; ++j) dp[(i & 1) ^ 1][j] = 0;
    for (int j = 0; j < n; ++j) {
      if (next[j + 1]) dp[(i & 1) ^ 1][next[j + 1]] += dp[i & 1][j];
      if (dp[(i & 1) ^ 1][next[j + 1]] >= k) dp[(i & 1) ^ 1][next[j + 1]] = k;
    }
    for (int j = 1; j <= n; ++j) {
      dp[(i & 1) ^ 1][j] += dp[(i & 1) ^ 1][j - 1];
      if (dp[(i & 1) ^ 1][j] >= k) dp[(i & 1) ^ 1][j] = k;
    }
  }
  return dp[m & 1][n] >= k;
}
int sa[maxn], rk[maxn], height[maxn], tot;
std::pair<int, int> all[maxn * maxn];
inline bool cmp(int x, int y) {
  while (s[x] == s[y]) ++x, ++y;
  return s[x] < s[y];
}
int main() {
  scanf("%d%d%lld", &n, &m, &k);
  scanf("%s", s + 1);
  for (int i = 1; i <= n; ++i) sa[i] = i;
  std::sort(sa + 1, sa + 1 + n, cmp);
  for (int i = 1; i <= n; ++i) rk[sa[i]] = i;
  for (int i = 1, k = 0; i <= n; ++i) {
    if (k) --k;
    while (s[i + k] == s[sa[rk[i] - 1] + k]) ++k;
    height[rk[i]] = k;
  }
  for (int i = 1; i <= n; ++i) {
    int l = sa[i], r = l + height[i];
    while (r <= n) all[++tot] = std::make_pair(l, r++);
  }
  int l = 1, r = tot;
  while (l < r) {
    int mid = (l + r + 1) >> 1;
    if (check(all[mid].first, all[mid].second))
      l = mid;
    else
      r = mid - 1;
  }
  for (int i = all[l].first; i <= all[l].second; ++i) putchar(s[i]);
}
