#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e6 + 10;
const long long MOD = 998244353;
const int INF = 0x3f3f3f3f;
int N, L, K;
char a[MAXN];
int sa;
int num[30];
string ans[1010];
int min() {
  for (int i = 0; i < 26; i++) {
    if (num[i]) {
      return i;
    }
  }
  return -1;
}
int max() {
  for (int i = 25; i > 0; i--) {
    if (num[i]) {
      return i;
    }
  }
  return -1;
}
int main() {
  int l;
  int now;
  while (~scanf("%d%d%d%s", &N, &L, &K, a)) {
    sa = N * L;
    memset(num, 0, sizeof(num));
    for (int i = 0; i < N; i++) {
      ans[i].clear();
    }
    for (int i = 0; i < sa; i++) {
      num[a[i] - 'a']++;
    }
    l = 0;
    for (int i = 0; i < L; i++) {
      for (int j = l; j < K; j++) {
        now = min();
        ans[j].push_back(now + 'a');
        num[now]--;
      }
      for (int j = l; j < K; j++) {
        if (ans[j][i] != ans[K - 1][i]) {
          while (ans[j].size() < L) {
            now = max();
            ans[j].push_back(now + 'a');
            num[now]--;
          }
          l = j + 1;
        }
      }
    }
    for (int i = K; i < N; i++) {
      while (ans[i].size() < L) {
        now = min();
        ans[i].push_back(now + 'a');
        num[now]--;
      }
    }
    sort(ans, ans + N);
    for (int i = 0; i < N; i++) {
      cout << ans[i] << endl;
    }
  }
  return 0;
}
