#include <bits/stdc++.h>
template <typename T>
inline void read(T &x) {
  x = 0;
  char c = getchar();
  while (!isdigit(c)) c = getchar();
  while (isdigit(c)) x = x * 10 + (c ^ 48), c = getchar();
}
using namespace std;
long long n, m;
long long K;
long long len;
char s[1010], ss[1010];
long long lcp[1010];
long long f[1010][1010], sum[1010][1010];
inline long long Add(long long a, long long b) { return a + b > K ? K : a + b; }
inline bool check() {
  for (long long i = 1; i <= n; ++i) {
    long long res = 0;
    while (res + 1 <= len && i + res <= n && s[i + res] == ss[res + 1]) ++res;
    lcp[i] = res;
  }
  memset(f, 0, sizeof(f));
  memset(sum, 0, sizeof(sum));
  f[0][n + 1] = 1;
  for (long long i = 1; i <= n + 1; ++i) sum[0][i] = 1;
  for (long long j = 1; j <= m; ++j) {
    for (long long i = n; i; --i) {
      if (s[i + lcp[i]] > ss[lcp[i] + 1]) {
        f[j][i] = sum[j - 1][i + lcp[i] + 1];
      } else
        f[j][i] = 0;
      sum[j][i] = Add(sum[j][i + 1], f[j][i]);
    }
  }
  return f[m][1] < K;
}
long long trie[501000][26], siz[501000], ttot;
inline void insert() {
  long long p = 0;
  for (long long i = 1; i <= len; ++i) {
    if (i > n - m + 1) {
      break;
    }
    long long c = ss[i] - 'a';
    if (!trie[p][c]) trie[p][c] = ++ttot;
    p = trie[p][c];
  }
}
inline void build_trie() {
  for (long long i = 1; i <= n; ++i) {
    len = 0;
    for (long long j = i; j <= n; ++j) {
      ss[++len] = s[j];
    }
    insert();
  }
  for (long long p = ttot; ~p; --p) {
    siz[p] = 1;
    for (long long c = 0; c < 26; ++c)
      if (trie[p][c]) siz[p] += siz[trie[p][c]];
  }
}
void half_find(long long p, long long k) {
  if (k == 1) return;
  --k;
  for (long long c = 0; c < 26; ++c)
    if (trie[p][c]) {
      long long to = trie[p][c];
      if (siz[to] >= k) return ss[++len] = 'a' + c, half_find(to, k), void();
      k -= siz[to];
    }
}
signed main() {
  read(n), read(m), read(K);
  scanf("%s", s + 1);
  build_trie();
  long long l = 2, r = siz[0], res = 0;
  while (l <= r) {
    long long mid = (l + r) >> 1;
    len = 0;
    memset(ss, 0, sizeof(ss));
    half_find(0, mid);
    if (check())
      res = mid, r = mid - 1;
    else
      l = mid + 1;
  }
  memset(ss, 0, sizeof(ss));
  len = 0;
  half_find(0, res);
  puts(ss + 1);
  return 0;
}
