#include<iostream>

#include<algorithm>
#include<vector>
#include<queue>
#include<stack>
#include<list>
#include<map>
#include<set>

#include<stdio.h>
#include<math.h>
#include<ctype.h>
#include<string.h>

using namespace std;

#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define FORD(i,a,b) for(int i=a;i>=b;i--)
#define PB push_back
#define PII pair<int, int>
#define fi first
#define se second
#define MP make_pair

#define SIZE(s) ((int)(s).size())

int X, Y;

#define MAX 1047
char G[2][MAX][MAX], FG[MAX][MAX];
char elm_point;

void read(int k)
{
	FOR(i,0,Y-1)
	{
		FOR(j,0,X-1)
			scanf("%c", &G[k][i][j]);
		scanf("\n");
	}
}

void print(int k)
{
	FOR(i,0,Y-1)
	{
		FOR(j,0,X-1) {
			if (k > -1) printf("%c", G[k][i][j]);
			else printf("%c", FG[i][j]);
		}
		printf("\n");
	}
}

vector<PII> P[2];

void find_elms(int k)
{
	P[k].clear();
	FOR(i,0,Y-1) FOR(j,0,X-1) 
		if (G[k][i][j] != elm_point) P[k].PB(MP(i,j));
}

void prepare_final(int k)
{
	FOR(i,0,Y-1)
		FOR(j,0,X-1)
		if (G[k][i][j] != elm_point) FG[i][j] = G[k][i][j];
}

PII first_top(int k)
{
	FOR(i,0,Y-1)
		FOR(j,0,X-1)
		if (G[k][i][j] == elm_point) return MP(i,j);
	return MP(-1,-1);
}

PII first_bottom(int k)
{
	FORD(i,Y-1,0)
		FORD(j,X-1,0)
		if (G[k][i][j] == elm_point) return MP(i,j);
	return MP(-1,-1);
}

PII first_left(int k)
{
	FOR(j,0,X-1)
		FOR(i,0,Y-1)
		if (G[k][i][j] == elm_point) return MP(i,j);
	return MP(-1,-1);
}

PII first_right(int k)
{
	FORD(j,X-1,0)
		FORD(i,Y-1,0)
		if (G[k][i][j] == elm_point) return MP(i,j);
	return MP(-1,-1);
}


void solve()
{
	//preapre final map
	FOR(i,0,Y-1) FOR(j,0,X-1) FG[i][j] = '.';
	prepare_final(0);
	prepare_final(1);
	//generate element array

	//top, left, right, bottom
	PII top1 = first_top(0);
	PII top2 = first_top(1);

	PII left1 = first_left(0);
	PII left2 = first_left(1);

	PII right1 = first_right(0);
	PII right2 = first_right(1);

	PII bottom1 = first_bottom(0);
	PII bottom2 = first_bottom(1);

/*	printf("%d %d - %d %d\n", top1.fi, top1.se, top2.fi, top2.se);
	printf("%d %d - %d %d\n", bottom1.fi, bottom1.se, bottom2.fi, bottom2.se);
	printf("%d %d - %d %d\n", left1.fi, left1.se, left2.fi, left2.se);
	printf("%d %d - %d %d\n", right1.fi, right1.se, right2.fi, right2.se);
*/
	PII difs[4];
	difs[0].fi = top2.fi - top1.fi;
	difs[0].se = top2.se - top1.se;

	difs[1].fi = bottom2.fi - bottom1.fi;
	difs[1].se = bottom2.se - bottom1.se;

	difs[2].fi = left2.fi - left1.fi;
	difs[2].se = left2.se - left1.se;

	difs[3].fi = right2.fi - right1.fi;
	difs[3].se = right2.se - right1.se;	
	//transform(0);
	//transform(1);
	
	//printf("%d %d, %d %d, %d %d, %d %d\n", difs[0].fi, difs[0].se, difs[1].fi, difs[1].se, difs[2].fi, difs[2].se, difs[3].fi, difs[3].se);

	PII best = difs[0];

	FOR(i,0,Y-1)
		FOR(j,0,X-1)
		{
			if (G[1][i][j] == elm_point)
			{
				int ny = i + difs[0].fi;
				int nx = j + difs[0].se;

				if (ny < Y && nx < X) {
					FG[ny][nx] = elm_point;
				}
			}
		}
}


int main()
{
	while(true)
	{
		scanf("%d %d '%c'\n", &Y, &X, &elm_point);
		if (X == 0 && Y == 0) return 0;
		read(0);
		scanf("\n");
		read(1);
		scanf("\n");
		//
		//
		//
		solve();

		//print(0);
		//print(1);
		print(-1);
		printf("\n");

	}
	return 0;
}