#include <bits/stdc++.h>
using namespace std;
inline int add(int _a, int _b, int md) {
  if (_a < 0) {
    _a += md;
  }
  if (_b < 0) {
    _b += md;
  }
  if (_a + _b >= md) {
    return _a + _b - md;
  }
  return _a + _b;
}
inline int mul(int _a, int _b, int md) {
  if (_a < 0) {
    _a += md;
  }
  if (_b < 0) {
    _b += md;
  }
  return ((long long int)((long long int)_a * (long long int)_b)) % md;
}
const int N = 1000;
int mod[] = {1000000007, 1000000007 + 2};
int base[] = {41, 47};
int p[2][N + 10], lcp_ara[N + 10][N + 10];
int n, m, h[2][N + 10], nxt[N + 10];
char str[N + 10];
map<long long int, bool> mp;
bool oflow[N + 10][N + 10];
long long int dp[N + 10][N + 10], thresh;
vector<pair<int, int> > vec;
void input() {
  int i, j;
  scanf("%d %d", &n, &m), scanf("%lld", &thresh);
  scanf("%s", str);
}
long long int get_hash(int l, int r) {
  int x = add(h[0][l], -mul(h[0][r + 1], p[0][r - l + 1], mod[0]), mod[0]);
  int y = add(h[1][l], -mul(h[1][r + 1], p[1][r - l + 1], mod[1]), mod[1]);
  return ((long long int)x << 31ll) | (long long int)y;
}
void pre_process() {
  int i, j;
  for (i = 0; i < 2; i++) {
    for (j = 1, p[i][0] = 1; j <= N + 2; j++) {
      p[i][j] = mul(p[i][j - 1], base[i], mod[i]);
    }
  }
  for (i = 0; i < 2; i++) {
    for (j = n - 1; j >= 0; --j) {
      h[i][j] =
          add(str[j] - 'a' + 1, mul(base[i], h[i][j + 1], mod[i]), mod[i]);
    }
  }
}
int get_lcp(int l1, int r1, int l2, int r2) {
  int lo = 0, hi = min(r1 - l1 + 1, r2 - l2 + 1), mid;
  long long int x, y;
  while (lo < hi) {
    mid = (lo + hi + 1) >> 1;
    x = get_hash(l1, l1 + mid - 1);
    y = get_hash(l2, l2 + mid - 1);
    if (x == y) {
      lo = mid;
    } else {
      hi = mid - 1;
    }
  }
  return lo;
}
int lcp(int l1, int r1, int l2, int r2) {
  int lo = 0, hi = min(r1 - l1 + 1, r2 - l2 + 1);
  return min(lcp_ara[l1][l2], hi);
}
bool cmp(pair<int, int> lhs, pair<int, int> rhs) {
  int l1 = lhs.first, r1 = lhs.second;
  int l2 = rhs.first, r2 = rhs.second;
  if (str[l1] != str[l2]) {
    return str[l1] < str[l2];
  }
  int lo = lcp(l1, r1, l2, r2);
  if (l1 + lo - 1 == r1 && l2 + lo - 1 == r2) {
    return false;
  } else if (l1 + lo - 1 == r1) {
    return true;
  } else if (l2 + lo - 1 == r2) {
    return false;
  } else {
    return str[l1 + lo] < str[l2 + lo];
  }
}
bool F(int pos) {
  int i, j, l = vec[pos].first, r = vec[pos].second, k;
  for (i = 0; i < n; i++) {
    if (cmp(make_pair(i, n - 1), make_pair(l, r))) {
      nxt[i] = -1;
      continue;
    }
    int x = lcp(i, n - 1, l, r);
    if (x == r - l + 1) {
      nxt[i] = i + x;
    } else {
      nxt[i] = i + x + 1;
    }
  }
  for (i = 0; i < n + 1; i++) {
    dp[0][i] = 1;
  }
  for (i = 1; i <= m; ++i) {
    for (j = n - 1; j >= 0; --j) {
      k = nxt[j], dp[i][j] = 0, oflow[i][j] = false;
      if (k == -1) {
        continue;
      }
      if (oflow[i - 1][k]) {
        oflow[i][j] = true;
        continue;
      }
      dp[i][j] = dp[i - 1][k];
    }
    if (i == m) {
      break;
    }
    for (j = n - 1; j >= 0; --j) {
      if (oflow[i][j] || oflow[i][j + 1]) {
        oflow[i][j] = true;
        continue;
      }
      if (dp[i][j] > LLONG_MAX - dp[i][j + 1]) {
        oflow[i][j] = true;
        continue;
      }
      dp[i][j] += dp[i][j + 1];
    }
  }
  return (oflow[m][0] || dp[m][0] >= thresh);
}
void solve() {
  int i, j;
  pre_process();
  for (i = 0; i < n; i++) {
    for (j = i; j < n; j++) {
      lcp_ara[i][j] = get_lcp(i, n - 1, j, n - 1);
      lcp_ara[j][i] = lcp_ara[i][j];
    }
  }
  for (i = 0; i < n; i++) {
    for (j = i; j < n; j++) {
      long long int hsh = get_hash(i, j);
      if (mp.find(hsh) == mp.end()) {
        vec.push_back(make_pair(i, j)), mp[hsh] = true;
      }
    }
  }
  sort(vec.begin(), vec.end(), cmp);
  reverse(vec.begin(), vec.end());
  int lo = 0, hi = (int)vec.size(), mid;
  while (lo < hi) {
    mid = (lo + hi) >> 1;
    if (F(mid)) {
      hi = mid;
    } else {
      lo = mid + 1;
    }
  }
  for (i = vec[hi].first; i <= vec[hi].second; i++) {
    printf("%c", str[i]);
  }
  puts("");
}
int main() {
  input();
  solve();
}
