N = int(input()) X = [list(map(int,input().split())) for _ in range(N)] A = list(map(int,input().split())) G = [[] for _ in range(N)] Gnum = [0] * N for i in range(N): for j in range(N): if X[i][j]: G[j].append(i) Gnum[i] += 1 ans = 10 ** 8 for bit in range(1 << N): num = Gnum.copy() stack = [] count = 0 _sum = 0 for i in range(N): if bit & (1 << i): _sum += A[i] stack.append(i) count += 1 num[i] = 0 else: if Gnum[i] == 0: stack.append(i) count += 1 while stack: now = stack.pop() for v in G[now]: num[v] -= 1 if num[v] == 0: stack.append(v) count += 1 if count == N: if _sum <= ans: ans = _sum print(ans)