#include <bits/stdc++.h>

using namespace std;

#define F(i,L,U) for((i)=(L);(i)<(U);(i)++)
#define FE(i,L,U) for((i)=(L);(i)<=(U);(i)++)
typedef vector<int> vi;

// class UF{
// public:
//   vi p, rank, setSize, m;
//   int numSets;
//   
//   UF(int N){
//     m.assign(N, 0);
//     setSize.assign(N, 1); numSets = N; rank.assign(N,0);
//     p.assign(N,0); 
//     for(int i = 0; i < N; i++) {
//       p[i] = i;
//       m[i] = i;
//     }
//     
//   }
//   
//   int findSet(int i){
//     
//     if (p[i] == i){
//       return i;
//       
//     }else{
//      int x =  findSet(p[i]);
//      m[i] = max(m[i], m[x]);
//      return p[i] = x;
//      
//     }
//     
// //     return (p[i] == i) ? i : (p[i] = findSet(p[i]););
//     
//   }
//   
//   bool isSameSet(int i, int j){
//     return findSet(i) == findSet(j);
//   }
//   
//   void unionSet(int i, int j){
//     if (!isSameSet(i,j)){
//       numSets--;
//       int x = findSet(i), y = findSet(j);
//       
//       if (rank[x] > rank[y]){
// 	m[x] = max(m[x], m[y]);
// 	p[y] = x; setSize[x] += setSize[y];
//       }else{
// 	m[y] = max(m[x], m[y]);
// 	p[x] = y; setSize[y] += setSize[x];
// 	
// 	if (rank[x] == rank[y]) rank[y]++;
//       }
//       
// 
//     }
//     
//   }
//   
// };


#define LINE(line) fgets(line, sizeof(line), stdin)

int M, N;

char C;

char line[1005];

char st[4][1005][1005];

// 0 pattern
// 1 m1
// 2 m2
// 3 res

int fx, fy, nx, ny;

int main(){
  int i, j, k;
  
  while(LINE(line)){
//     printf("befing:: %s", line);
//     printf("%c\n", (char)39);
    if (strcmp(line, "0 0 ' '\n") == 0) break;
    
    sscanf(line, "%d %d '%c'", &M, &N, &C);
    if (M == 0 || N == 0) break;
//     printf("M=%d N=%d C=%c\n",M, N, C);
   

    
    
    F(i,0,M){
      LINE(st[1][i]);
//       printf("%s", st[1][i]);
    }
    LINE(line);// empty line
//     printf("\n");
    F(i,0,M){
      LINE(st[2][i]);
//       printf("%s", st[2][i]);
    }
     LINE(line);// empty line
     
     fx = nx = -1;
     
     F(i,0,M){
      F(j,0,N){
	  if (nx == -1){
	    if (st[2][i][j] == C){
		nx = j;
		ny = i;
	    }
	  }
	  
	  if (st[2][i][j] == C){
	    st[0][i][j] = C;
	
	  }
	
	if (st[1][i][j] == C){
	  
	  if (fx == -1){
	    fx = j;
	    fy = i;
	  }
	  st[3][i][j] = st[2][i][j];
	  
	}else{
	  st[3][i][j] = st[1][i][j];
	}
	
      }
     }
     
     int dx = nx - fx, dy = ny - fy;
     
//      printf("dx=%d dy=%d\n", dx, dy);
     
      F(i,0,M){
	F(j,0,N){
	  if (st[0][i][j] == C){
	    int x = j + dx;
	    int y = i + dy;
	    if (x >= 0 && x < N && y >= 0 && y < M){
	      st[3][y][x] = C;
	      
	    }
	    
	  }
	}
      }
      
      F(i,0,M){
	F(j,0,N){
	  
	  printf("%c", st[3][i][j]);
	}
	printf("\n");
      }
     printf("\n");
  }


  return 0;
}

Diff to submission s796