#include <iostream>
#include <string>
#include <vector>
#include <cstdio>

struct coordinate {
    int row, column;
};

namespace wtf {
struct silhouette {
    std::vector<coordinate> coordinates;
    coordinate beginning;
    coordinate beginning2;
};
}

char frame1[1001][1001];
char frame2[1001][1001];

int main(){
    int rows, columns;
    char marker;
    wtf::silhouette silhouette;
    while (true){
        std::scanf("%d %d '%c'", &rows, &columns, &marker);
        if (rows == 0){
            break;
        }

//        std::printf("READ: %d %d %c\n", rows, columns, marker);

        silhouette.coordinates.clear();
        bool is_first = true;
        // read in first frame
        for (int r = 0; r < rows; ++r){
        // ignore newline
        getchar();
            for (int c = 0; c < columns; ++c){
                frame1[r][c] = getchar();
                if (frame1[r][c] == marker){
                    if (is_first){
                        silhouette.beginning = {r, c};
                        is_first = false;
                    }
                    silhouette.coordinates.push_back({r, c});
                }
            }
        }

/*        std::printf("READ:\n");
        for (int r = 0; r < rows; ++r){
            for (int c = 0; c < columns; ++c){
                putchar(frame1[r][c]);
            }
            putchar('\n');
        }
*/
        // skip a line??
        getchar();

        // read in second frame
        is_first = true;
        for (int r = 0; r < rows; ++r){
            //ignore newline
            getchar();
            for (int c = 0; c < columns; ++c){
                frame2[r][c] = getchar();
                if (frame2[r][c] == marker){
                    if (is_first){
                        silhouette.beginning2 = {r, c};
                        is_first = false;
                    }
                    frame2[r][c] = frame1[r][c];
                }
            }
        }

 /*       std::printf("READ:\n");
        for (int r = 0; r < rows; ++r){
            for (int c = 0; c < columns; ++c){
                putchar(frame2[r][c]);
            }
            putchar('\n');
        }
*/

        // Silhouette
        //new offset
//        std::printf("BEGINNING1: %d %d\n", silhouette.beginning.row, silhouette.beginning.column);
//        std::printf("BEGINNING2: %d %d\n", silhouette.beginning2.row, silhouette.beginning2.column);
        coordinate offset = {silhouette.beginning2.row - silhouette.beginning.row, silhouette.beginning2.column - silhouette.beginning.column};
//        std::printf("OFFSET:%d %d\n", offset.row, offset.column);
        for (auto& p : silhouette.coordinates){
            int row, column;
            row = p.row + 2 * offset.row;
            column = p.column +  2 * offset.column;
            if (row >= 0 && row < rows && column >= 0 && column < columns){
                frame2[row][column] = marker;
            }
        }

        // print out
        for (int r = 0; r < rows; ++r){
            for (int c = 0; c < columns; ++c){
                putchar(frame2[r][c]);
            }
            putchar('\n');
        }

        putchar('\n');

    }
}