Lucy likes letters. She studied the definition of the lexicographical order at school and plays with it.

At first, she tried to construct the lexicographically smallest word out of given letters. It was so easy! Then she tried to build multiple words and minimize one of them. This was much harder!

Formally, Lucy wants to make n words of length l each out of the given n ⋅ l letters, so that the k-th of them in the lexicographic order is lexicographically as small as possible.

Input

The first line contains three integers n, l, and k (1≤ k ≤ n ≤ 1 000; 1 ≤ l ≤ 1 000) — the total number of words, the length of each word, and the index of the word Lucy wants to minimize.

The next line contains a string of n ⋅ l lowercase letters of the English alphabet.

Output

Output n words of l letters each, one per line, using the letters from the input. Words must be sorted in the lexicographic order, and the k-th of them must be lexicographically as small as possible. If there are multiple answers with the smallest k-th word, output any of them.

Examples

Input


3 2 2
abcdef


Output


af
bc
ed

Input


2 3 1
abcabc


Output


aab
bcc
#define DEBUG
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp> 
#include <ext/pb_ds/tree_policy.hpp> 
using namespace __gnu_pbds; 
using namespace std;
 
#define F first
#define S second
#define fi first
#define sc second
#define pb push_back
#define endl "\n"

#define IOS { ios :: sync_with_stdio(false); cin.tie(0); cout.tie(0); }

#ifdef DEBUG
    #define dbg(s) {s;}
#endif

#ifndef DEBUG
    #define dbg(s)
#endif

using namespace std;

mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
int grand(int x) { // from [0, x-1]
    return uniform_int_distribution<int>(0, x - 1)(rng);
}

#define int ll
#define i32 int32_t

#define RBTTYPE int
#define ordered_set tree<RBTTYPE, null_type, less<RBTTYPE>, rb_tree_tag,tree_order_statistics_node_update> 

#define all(v) (v).begin(),(v).end()

typedef long long ll;
typedef long double ld;
typedef pair< int, int > pii;
typedef pair< ll, ll > pll;

int getInt () {
    bool minus = false;
    int result = 0;
    char ch;
    ch = getchar();
    while (true) {
        if (ch == '-') break;
        if (ch >= '0' && ch <= '9') break;
        ch = getchar();
    }
    if (ch == '-') minus = true; else result = ch-'0';
    while (true) {
        ch = getchar();
        if (ch < '0' || ch > '9') break;
        result = result*10 + (ch - '0');
    }
    if (minus)
        return -result;
    else
        return result;
}


ll gcd(ll x, ll y) {
    if (x < y) return gcd(y, x);
    if (y == 0) return x;
    return gcd(y, x % y);
} 

const ll mod = 1e9 + 7;

ll modexp(ll x, ll ex) {
    ll ans = 1ll;
    while (ex > 0) {
        if (ex & 1ll) ans = (ans * x) % mod;
        ex >>= 1ll;
        x = (x * x) % mod;
    }
    return ans;
}

const int maxn = 1e6 + 7;
const int N = 1e3 + 7;

const ll inf = 1e9 + 7;

int ct[27];
int arr[N][N];
int n;
int l_;

void pls(int x, int l, int r){

    if(x > n) return;

    int tt = 0;
    int req = r - l + 1;
    int c;
    for(int i = 0; i < 26; i++){
        tt += ct[i];
        if(tt >= req){
            c = i;
            break;
        }
    }

    int nl = 0;
    for(int i = r; i >= l; i--){
        while(ct[c] == 0) c--;
        cout << i << " " << x << " " << c << " " << ct[c] << endl;
        arr[i][x] = c;
        ct[c]--;
        if(arr[i][x] == arr[r][x]) nl = i;
    }

    if(req == 1){
        
        c = 0;
        for(int i = x + 1; i <= l_; i++){
            while(ct[c] == 0) c++;
            arr[r][i] = c;
            ct[c]--;
        }
        return ;
    }


    pls(x + 1, nl, r);
    
}

i32 main() {
    //freopen("<file>.in", "r", stdin);
    //freopen("<file>.out", "w", stdout);

    IOS;

    int k;
    cin >> n >> l_ >> k;
    int l = l_;

    memset(arr, -1, sizeof(arr));

    char c;
    for(int i = 0; i < n*l; i++){
        cin >> c;
        ct[c - 'a'] ++;
    }
    
    pls(1, 1, k);

    int id = 0;

    for(int i = 1; i <= n; i++){
        for(int j = 1; j <= l; j++){
            if(arr[i][j] == -1){
                while(ct[id] == 0) id++;
                arr[i][j] = id;
                ct[id]--;
            }
        }
    }

    for(int i = 1; i <= n; i++){
        for(int j = 1; j <= l; j++){
            cout << char('a' + arr[i][j]) ;
        }
        cout << endl;
    }
    
}
