from functools import cache
def max_number(number, connect):
n = len(number)
@cache
def dfs(i):
if i < 0:
return 0
for j in range(i, 0, -1):
if connect[i - 1][j - 1] == 1:
return max(dfs(i - 1), dfs(i - 1) + number[i - 1])
return dfs(i - 1)
return dfs(n - 1)
n = int(input())
number = list(map(int, input().split()))
connect = [[0] * (n - 1) for _ in range(n - 1)]
for i in range(n - 1):
connect[i] = list(map(int, input().split()))
result = max_number(number, connect)
print(result)