def solve(): N,K=map(int,input().split()) M=0 for _ in range(2*N): M+=input().count("#") C=[] for _ in range(2*N): C.append(list(map(int,input().split()))) # Type 1 X=[] for i in range(2*N): X.extend(C[i]) X.sort(reverse=True) alpha=sum(X[:M]) # Type 2 if M%2==0: Y=[] for i in range(2*N): Ci=C[i] for j in range(N): Y.append(Ci[j]+Ci[(2*N-1)-j]) Y.sort(reverse=True) beta=sum(Y[:M//2])+K else: beta=-float("inf") return max(alpha, beta) #================================================== print(solve())