// #define _GLIBCXX_DEBUG #include using namespace std; #include using namespace atcoder; using ll = long long; using vi = vector; using vvi = vector>; using pii = pair; #define rep(i, n) for (int i = 0; i < (int)(n); ++i) #define repr(i, n) for (int i = (int)(n - 1); i >= 0; --i) int main() { int n; ll K; cin >> n >> K; n *= 2; int cnt = 0; rep(i, n) rep(j, n) { char ch; cin >> ch; if (ch == '#') cnt++; } vvi c(n, vi(n)); rep(i, n) rep(j, n) cin >> c[i][j]; ll ret = 0; vi s; rep(i, n) rep(j, n) s.push_back(c[i][j]); sort(s.begin(), s.end(), greater()); rep(k, cnt) ret += s[k]; if (~cnt & 1) { vi t; rep(i, n) rep(j, n / 2) t.push_back(c[i][j] + c[i][n - 1 - j]); sort(t.begin(), t.end(), greater()); ll tmp = K; rep(k, cnt / 2) tmp += t[k]; ret = max(ret, tmp); } cout << ret << endl; return 0; }