#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e3 + 5;
char s[MAXN * MAXN];
struct node {
  char s[MAXN];
  int len;
} root[MAXN];
int main() {
  int N, L, K, l = 0;
  vector<int> v;
  scanf("%d%d%d", &N, &L, &K);
  scanf("%s", s);
  sort(s, s + N * L);
  for (int i = 0; i < K; i++) {
    root[i].len = 1;
    root[i].s[0] = s[l++];
  }
  for (int k = 1; k < L; k++) {
    v.clear();
    v.push_back(K - 1);
    for (int i = K - 2; i >= 0; i--) {
      if (root[i].s[k - 1] == root[K - 1].s[k - 1]) {
        v.push_back(i);
      } else
        break;
    }
    for (int i = v.size() - 1; i >= 0; i--) {
      root[v[i]].s[root[v[i]].len++] = s[l++];
    }
  }
  for (int i = 0; i < N; i++) {
    for (int j = 0; j < root[i].len; j++) printf("%c", root[i].s[j]);
    for (int j = root[i].len; j < L; j++) {
      printf("%c", s[l++]);
    }
    printf("\n");
  }
  return 0;
}
