#include <bits/stdc++.h>

using namespace std;

#define MP make_pair
#define PB push_back
#define upto(i,n) for(int i = 0; (i)<(n); i++)
#define REP(i,n) upto(i,n)
#define FOR(i,a,b) for(int (i) = (a); i<=(b); i++)
#define RI(a) scanf("%d", &a);
#define DRI(a) int a; scanf("%d", &a);
typedef long long ll;
typedef vector<int> vi;
typedef pair<int,int> ii;
typedef vector<ii> vii;
#define ff first
#define ss second
#define DEB(x) cerr << ">>>" << (#x) << " -> " << (x) << endl;

char s[4];
char a[1234][1234];
char a2[1234][1234];
char a3[1234][1234];
vii vec;
ii gpos;
char C;
int N,M;

bool match( ii p , ii q, char c){
   
   ii pos = MP(  q.ff - p.ff, q.ss - p.ss );
   REP(i,vec.size()){
      if ( ! a[vec[i].ff + pos.ff ][ vec[i].ss + pos.ss] == c  )return false;
   }
   gpos = MP(pos.ff, pos.ss);
   return true;

}

void win(){

  // DEB(gpos.ff)
   //DEB(gpos.ss)
   
   REP(i,1002)REP(j,1002)a3[i][j] = 0;
   REP(i,vec.size()){
      if (vec[i].ff + gpos.ff >= 0 && vec[i].ff + gpos.ff < 1001 &&
         vec[i].ss + gpos.ss >= 0 && vec[i].ss + gpos.ss < 1001
       )a3[ vec[i].ff + gpos.ff ] [ vec[i].ss + gpos.ss ] = C;
   }
   REP(i,N){ REP(j,M){ 
   if (a3[i][j] == 0){
      if ( a[i][j] == C ) a3[i][j] = a2[i][j];
      else a3[i][j] = a[i][j];
   
   }
   
   printf("%c", a3[i][j]);}   printf("\n");}
   printf("\n");
}

int m,n;
int main() {

   while(1){
   //clear to do
      
      vec.clear();
      RI(n);
      if (n == 0)break;
      RI(m);
      N = n; M = m;
      char c;
      scanf(" ā€™%cā€™",&c );
      //char c = sā€™[1];
      //printf("--%s--",s);
      //cout << c << endl;
      
      C =c;
      
      REP(i,n)scanf(" %s",a[i]);
      REP(i,n)scanf(" %s",a2[i]);
      //DEB(n);
      //DEB(m);
      
      /*printf("A1\n");
      REP(i,n) printf("%s\n", a[i]);
      printf("A2\n");
      REP(i,n) printf("%s\n", a2[i]);
      DEB(1)*/
      
      ii up, down, r, l;
      
      int key = 0;
      REP(i,n)REP(j,m){
         if (a2[i][j] == c) { up = MP( i,j); key = 1;goto up1;}
        }
      up1:
      
      
          
      if (key == 0){
         REP(i,n)REP(j,m){
            printf("%s\n", a2[i]);   
         }
         printf("\n");
         return 0;
      
      }
      for (int i = n-1; i >= 0; i--)REP(j,m){
         if (a2[i][j] == c) { down = MP( i,j); goto iop;}
      }
      iop:
      REP(j,m)REP(i,n){
         if (a2[i][j] == c) { l = MP( i,j); goto ppp;}
      }
      ppp:
      
      for (int j = m-1; j >= 0; j--)REP(i,n){
         if (a2[i][j] == c) { r = MP( i,j); goto yyy;}
      }
      yyy:
      
   
      REP(i,n)REP(j,m) if  (a2[i][j] == c)  vec.PB( MP(i,j) );
      
      
      key = m-1;
      REP(i,n)REP(j,key+1){
         if (a[i][j] == c) {   if ( match(MP(i,j), l, c  ) ){win();goto end;} ; if ( match(MP(i,j), up, c  ) ) {win();goto end;} ; key = j; 
         int k = 1;
         while(1){
            if (j+k >= m)break;
            if (a[i][j+k] == c){
               if ( match(MP(i,j+k), l, c  ) ){win();goto end;} ; if ( match(MP(i,j+k), up, c  ) ) {win();goto end;}
            }
            else break;
            k++;
         
         }
         
         break; }
      }
      
      key = m-1;
       for (int i = n-1; i >= 0; i--)REP(j,key+1){
         if (a[i][j] == c) {  if ( match(MP(i,j), l, c  ) ){win();goto end;} ; if ( match(MP(i,j), down, c  ) ) {win();goto end;} ; key = j; 
         
         
         int k = 1;
         while(1){
            if (j+k >= m)break;
            if (a[i][j+k] == c){
               if ( match(MP(i,j+k), l, c  ) ){win();goto end;} ; if ( match(MP(i,j+k), down, c  ) ) {win();goto end;}
            }
            else break;
            k++;
         
         }
         
         
         
         break;}
      }
      
      
      key = 0;
       for (int i = n-1; i >= 0; i--)for (int j = m-1; j >= key; j--){
         if (a[i][j] == c) {  if ( match(MP(i,j), r, c  ) ){win();goto end;} ; if ( match(MP(i,j), down, c  ) ) {win();goto end;} ; key = j; 
         
         
         int k = 1;
         while(1){
            if (j-k > 0)break;
            if (a[i][j-k]==c){
               if ( match(MP(i,j-k), r, c  ) ){win();goto end;} ; if ( match(MP(i,j-k), down, c  ) ) {win();goto end;}
            }
            else break;
            k++;
         
         }
         
         
         
         
         break;}
      }
      
       key = 0;
       REP(i,n)for (int j = m-1; j >= key; j--){
         if (a[i][j] == c) {  if ( match(MP(i,j), r, c  ) ){win();goto end;} ; if ( match(MP(i,j), up, c  ) ) {win();goto end;} ; key = j; 
         
         
          int k = 1;
         while(1){
            if (j-k > 0)break;
            if (a[i][j-k]==c){
               if ( match(MP(i,j-k), r, c  ) ){win();goto end;} ; if ( match(MP(i,j-k), up, c  ) ) {win();goto end;}
            }
            else break;
            k++;
         
         }
         
         
         
         
         break;}
      }
      
      end:
      int b;
      
      
      
      
      
      }


  return 0;
}