#include #define rep(i,n) for(int i = 0; i < (n); i++) using namespace std; typedef long long ll; int main(){ cin.tie(0); ios::sync_with_stdio(0); ll N,K; cin >> N >> K; vector S(2 * N); rep(i,2*N) cin >> S[i]; vector> C(2 * N, vector(2 * N)); rep(i,2*N)rep(j,2*N) cin >> C[i][j]; int cntB = 0; rep(i,2*N)rep(j,2*N) if(S[i][j] == '#') cntB++; ll ans1 = [N, C, cntB]() { vector V; rep(i,2*N)rep(j,2*N) V.push_back(C[i][j]); sort(V.rbegin(), V.rend()); ll ans = 0; rep(i,cntB) ans += V[i]; return ans; }(); ll ans2 = [N, K, C, cntB]() { if(cntB % 2 == 1) return numeric_limits::min(); vector V; rep(i,2*N)rep(j,N) V.push_back(C[i][j] + C[i][2 * N - 1 - j]); sort(V.rbegin(), V.rend()); ll ans = 0; rep(i,cntB/2) ans += V[i]; return ans + K; }(); cout << max(ans1, ans2) << endl; }