#include using namespace std; #define ll long long const int N=1e4+5; int h,w,n; char c; int a[N],p[N]; bool f[N]; char ans[N][4][4]; int tp[N][4]; struct T{ int id,l; bool operator <(const T&x) const{ return f[id]>f[x.id]; } }; priority_queue b[N]; T x[N]; signed main(){ // freopen("tetris.in","r",stdin); // freopen("tetris.out","w",stdout); cin>>h>>w>>n; for (int i=1;i<=h;i++){ for (int j=1;j<=w;j++){ cin>>c; if(c=='#') a[j]++; } } for (int i=1;i<=n;i++){ cin>>p[i]; p[i]++; b[p[i]].push({i,1}); for (int j=1;j<=3;j++){ for (int k=1;k<=3;k++){ ans[i][j][k]='.'; } } } for (int i=1;i<=w;i++){ int cnt=0; while(!b[i].empty()){ x[++cnt]=b[i].top(); if(x[cnt].l!=3) b[i+1].push({x[cnt].id,x[cnt].l+1}); b[i].pop(); } for (int j=1;j<=cnt;j++) b[i].push(x[j]); for (int j=1;j<=a[i];j++){ int id=b[i].top().id,l=b[i].top().l; b[i].pop(); ans[id][++tp[id][l]][l]='#'; f[id]=1; if(tp[id][l]!=3){ b[i].push({id,l}); } } } for (int i=1;i<=n;i++){ for (int j=1;j<=3;j++){ for (int k=1;k<=3;k++){ cout<