#include using namespace std; typedef long long ll; typedef pair P; #define REP(i,n) for(ll i=0;i> N >> U >> H >> W; vector s(N+1); for(i=1;i<=N;i++){ cin >> F[i]; string x; REP(j,H){ REP(k,W){ char c; cin >> c; x+=c; } } s[i]=x; } vector t; for(i=1;i<=U;i++){ for(j=i;j<=U;j++){ vector b; REP(k,H*W) if(s[i][k]!=s[j][k]) b.push_back(k); if((ll)b.size()==0) t.push_back(s[i]); else if((ll)b.size()==1){ t.push_back(s[i]); t.push_back(s[j]); } else if((ll)b.size()==2){ string x=s[i]; x[b[0]]='.'; x[b[1]]='.'; t.push_back(x); x[b[0]]='#'; x[b[1]]='#'; t.push_back(x); } } } ll n=t.size(); if(n==0){ if(H*W<=6){ ll mx=-1000; string z; for(i=0;i<(1LL<mx){ mx=u-v; z=x; } } cout << mx << endl; REP(i,H*W){ cout << z[i]; if((i+1)%W==0) cout << endl; } return 0; } if(H*W>=7){ string z; ll mx=-1000; for(i=0;i<(1LL<<7);i++){ string x; for(j=0;j<7;j++){ if(i&(1LL<mx){ mx=u-v; z=x; } } cout << mx << endl; REP(i,H*W){ cout << z[i]; if((i+1)%W==0) cout << endl; } return 0; } } sort(t.begin(),t.end()); t.erase(unique(t.begin(),t.end()),t.end()); n=t.size(); ll mx=-1000; ll g=-1; REP(i,n){ string x=t[i]; ll u=0; for(j=1;j<=U;j++){ u+=f(x,s[j],j); } ll v=0; for(j=U+1;j<=N;j++){ v+=f(x,s[j],j); } if(u-v>mx){ mx=u-v; g=i; } } if(mx>=0){ cout << mx << endl; REP(i,H*W){ cout << t[g][i]; if((i+1)%W==0) cout << endl; } return 0; } if(H*W<=6){ string z; for(i=0;i<(1LL<mx){ mx=u-v; z=x; } } cout << mx << endl; REP(i,H*W){ cout << z[i]; if((i+1)%W==0) cout << endl; } return 0; } if(H*W>=7){ string z; for(i=0;i<(1LL<<7);i++){ string x; for(j=0;j<7;j++){ if(i&(1LL<mx){ mx=u-v; z=x; } } cout << mx << endl; REP(i,H*W){ cout << z[i]; if((i+1)%W==0) cout << endl; } return 0; } return 0; }