#include <bits/stdc++.h>
using namespace std;
#define FOR(i,a,b) for(int i=(a);i<(b);++i)
#define rep(i,n)   FOR(i,0,n)
#define pb push_back
#define mp make_pair
typedef long long ll;
typedef pair<int,int> pint;

int main(){
    int pl,cn,wi,cs;
    while(cin>>pl,pl){
        cin>>cn>>wi>>cs;
        vector<string> vs,ans;
        string s;
        cin.ignore();
        while(getline(cin,s),s!="?"){
            if(s.size()==0) vs.pb(string(wi,'.'));
            else if(s.size()<=wi){
                while(s.size()%wi!=0) s+='.';
                vs.pb(s);
            }
            else{
                int curl=0;
                while(s.size()-curl>=wi){
                    vs.pb(s.substr(curl,wi));
                    curl+=wi;
                }
                if(curl!=s.size()){
                    string ls=s.substr(curl);
                    while(ls.size()%wi!=0) ls+='.';
                    vs.pb(ls);
                }
            }
        }
        int nump=(vs.size()-1)/(cn*pl)+1;
        if(vs.empty()) nump=0;
        string sp(cs,'.');
        string pad(wi,'.');
        rep(k,nump){
            rep(i,cn){
                rep(j,pl){
                    if(vs.size()>k*pl*cn+(j+i*pl)){
                        if(i==0) ans.pb(vs[k*pl*cn+(j+i*pl)]);
                        else ans[k*pl+j+k]+=sp+vs[k*pl*cn+(j+i*pl)];
                    }
                    else{
                        if(i==0) ans.pb(pad);
                        else ans[k*pl+j+k]+=sp+pad;
                    }
                }
            }
            ans.pb("#");
        }
        ans.pb("?");
        rep(i,ans.size()) cout<<ans[i]<<endl;
    }
    return 0;
}