#include <iostream>
#include <vector>
#include <cstdlib>
using namespace std;
int matr[1001][1001];
char top[1001][1001];
char view1[10][1001];
char view2[10][1001];
int hh1[1001];
int hh2[1001];
vector <pair <int, int> > h1;
vector <pair <int, int> > h2;
int n, m, h;
int getH(int h, char vi[][1001], int col)
{
    int val=0;
    while(val<h && vi[val][col]=='.')
        val++;
    return h-val;
}
void complete()
{
    int i, j;
    //if(!check())
      //  return;
    for(i=0;i<n;i++)
        for(j=0;j<m;j++)
            if(!matr[i][j] && top[i][j]=='#')
                matr[i][j]=1;
    for(i=0;i<n;i++)
    {
        for(j=0;j<m;j++)
        {
            if(matr[i][j])
                cout<<matr[i][j];
            else
                cout<<'.';
        }
        cout<<'\n';
    }
    exit(0);
}
void backt2(int k)
{
    int i;
    if(k>=h2.size())
        complete();
    for(i=0; i<m; i++)
    {
        if(matr[h2[k].first][i]!=0 && matr[h2[k].first][i]!=h2[k].second)
            continue;
        if(h2[k].second>hh1[i])
            continue;
        if(top[h2[k].first][i]=='.')
            continue;
        matr[h2[k].first][i]=h2[k].second;
        backt2(k+1);
        matr[h2[k].first][i]=0;
    }
}
void backt1(int k)
{
    int i;
    if(k>=h1.size())
        backt2(0);
    for(i=0; i<n; i++)
    {
        if(h1[k].second>hh2[n-i-1])
            continue;
        if(top[i][h1[k].first]=='.')
            continue;
        matr[i][h1[k].first]=h1[k].second;
        backt1(k+1);
        matr[i][h1[k].first]=0;
    }
}
int main()
{
    //int n, m, h;
    int i;
    cin>>n>>m>>h;
    for(i=0;i<n;i++)
        cin>>top[i];
    for(i=0;i<h;i++)
        cin>>view1[i];
    for(i=0;i<h;i++)
        cin>>view2[i];
    for(i=0;i<m;i++)
    {
        hh1[i]=getH(h, view1, i);
        if(hh1[i])
            h1.push_back(make_pair(i, hh1[i]));
    }
    for(i=0;i<n;i++)
    {
        hh2[i]=getH(h, view2, i);
        if(hh2[i])
            h2.push_back(make_pair(n-i-1, hh2[i]));
    }
    backt1(0);
    return 0;
}