#int(input()) #map(int, input().split()) #list(map(int, input().split())) N, K = map(int, input().split()) M = 2 * N S = [0] * M for i in range(M): S[i] = input() C = [0] * M for i in range(M): C[i] = list(map(int, input().split())) a = 0 for i in range(M): a += S[i].count("#") u = [] for i in range(M): for j in range(M): u.append(C[i][j]) u = sorted(u, reverse=True) ans = sum(u[:a]) if a % 2 == 0: v = [] for i in range(M): for j in range(N): v.append(C[i][j] + C[i][M-1-j]) v = sorted(v, reverse=True) ans = max(ans, K + sum(v[:a//2])) print(ans)