
import java.awt.Point;
import java.util.ArrayList;
import java.util.Scanner;
public class Tranformy {
    public static void main(String[] args) {
        ArrayList<String> lines = new ArrayList<String>();
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < 3; i++) {
            lines.add(sc.nextLine());
        }
        TranfomyData t = TranfomyData.parseTranfomyData(lines);
        t.doTransform();
        t.doFillValue();
        t.showCrop();
    }
}

class TranfomyData{
    Point start,end;
    String word;
    String humanWord;
    String[] lines;
    public static TranfomyData parseTranfomyData(ArrayList<String> lines){
        TranfomyData t = new TranfomyData();
        boolean isFirst = true;
        for (String line : lines) {
            String[] data;
            data = line.split(" ");
            Point p = new Point(Integer.parseInt(data[1]), Integer.parseInt(data[0]));
            if(isFirst==true){
                t.start = p;
                isFirst = false;
            }else{
                t.end = p;
                break;
            }
        }
        t.word = lines.get(2);
        return t;
    }
    
    public void doTransform(){
        String[] datas = this.word.split(" ");
        StringBuilder buffer = new StringBuilder();
        int index=0;
        for (String data : datas) {
            int size = datas[index].length();
            for (int i = 0; i < size; i++) {
                int value;
                char tmp = data.charAt(i);
                if(tmp>='A'&&tmp<='Z'){
                    value = tmp-'A'-size;
                    if(value<0){
                        value = 26+value;
                    }
                    value = (value%26);
                    value = Math.abs(value)+'A';
                    buffer.append(Character.toChars(value));
                }else if(tmp>='a'&&tmp<='z'){
                    value = tmp-'a'-size;
                    if(value<0){
                        value = 26+value;
                    }
                    value = (value%26);
                    value = Math.abs(value)+'a';
                    buffer.append(Character.toChars(value));
                }else{
                    buffer.append(tmp);
                }
            }
            index++;
            if(index!=datas.length)
                buffer.append(" ");
        }
        this.humanWord=buffer.toString();
    }
    
    public void doFillValue(){
        int word_size = this.humanWord.length();
        lines = new String[word_size];
        for (int i = 0; i < word_size; i++) {
            lines[i]=humanWord.substring(word_size-i, word_size)+humanWord.substring(0,word_size-i);
            //System.out.println(lines[i]);
        }
    }
    
    public void showCrop(){
        for (int i = (int) start.getY()-1; i <= (int) end.getY()-1; i++) {
            for (int j = (int) start.getX()-1; j <= (int) end.getX()-1; j++) {
                System.out.print(""+lines[i].charAt(j));
            }
            System.out.println("");
        }   
    }    
}


