use = []
cost = []
#机器数, 工件数 最长时间20202
m, n = map(int, input().split())
work = list(map(int, input().split()))
for i in range(n):
use.append(list(map(int, input().split())))
for i in range(n):
cost.append(list (map(int, input().split())))
T = 0
machi = [[0 for i in range(10000)] for j in range(m)]
last = [0 for i in range(n)]
#机器最后加工时间
last_time = [0 for i in range(n)]
step = 0
while step < m*n:
#加工工件号
x = work[step]-1
#加工工件的工序号
num_work = last[x]
#加工机器号
machi_work = use[x][num_work]-1
#加工工件耗时
cost_time = cost[x][num_work]
t = 0
#下一步
step += 1
last[x] += 1
for i in range(last_time[x], last_time[x]+10000):
if machi[machi_work][i] == 0:
t += 1
else:
t = 0
if t == cost_time:
last_time[x] = i + 1
for j in range(i, i-t, -1):
machi[machi_work][j] = 1
if i > T:
T = i
break
print(T+1)