#include <bits/stdc++.h>
using namespace std;
string s;
char second[1010];
int sz, m;
long long precalc[1010], dp[1010][1010];
vector<string> strs;
void solve() {
  memset(dp, 0, sizeof dp);
  for (int idx = sz - 1; idx >= 0; idx--) {
    for (int window = 1; window <= m; window++) {
      if (window == 1)
        dp[idx][window] = (precalc[idx] != -1);
      else {
        if (precalc[idx] != -1)
          dp[idx][window] = dp[precalc[idx] + 1][window - 1];
      }
      if (idx != 0) dp[idx][window] += dp[idx + 1][window];
      if (dp[idx][window] > 1e18) dp[idx][window] = 1e18;
    }
  }
}
void build(const string &st) {
  string aux;
  for (int i = 0; i < sz; i++) {
    int j = i;
    aux = "";
    aux += s[j++];
    while (st > aux and j < sz) aux += s[j++];
    if (st <= aux)
      precalc[i] = j - 1;
    else
      precalc[i] = -1;
  }
}
int main() {
  long long k;
  int n;
  scanf("%d %d %lld", &n, &m, &k);
  getchar();
  scanf("%s", second);
  s = string(second);
  sz = s.size();
  string aux;
  for (int i = 0; i < sz; i++) {
    aux = "";
    for (int j = i; j < sz; j++) {
      aux += s[j];
      strs.emplace_back(aux);
    }
  }
  sort(strs.rbegin(), strs.rend());
  int l = 0, r = strs.size() - 1, mid;
  string ans = "-1";
  while (l <= r) {
    mid = (l + r) >> 1;
    build(strs[mid]);
    solve();
    if (dp[0][m] < k)
      l = mid + 1;
    else {
      ans = strs[mid];
      r = mid - 1;
    }
  }
  cout << ans << endl;
  return 0;
}
