import collections N = int(input()) X = [] for _ in range(N): X.append(list(map(int,input().split()))) A = list(map(int,input().split())) ans = 10**20 for i in range(2 ** N): cost = 0 Lie = set() for j in range(N): if ((i >> j) & 1): cost+=A[j] Lie.add(j) M = [[] for _ in range(N)] CNT = [0]*N #上書きしちゃうが問題なし for i in range(N): for j in range(N): if X[i][j]==1 and (not j in Lie): M[j].append(i) CNT[i]+=1 D = collections.deque() for i in range(N): if CNT[i]==0: D.append(i) while len(D): i = D.pop() for j in M[i]: CNT[j]-=1 if CNT[j]==0: D.append(j) if sum(CNT)==0: ans = min(ans,cost) print(ans)