https://www.acmicpc.net/problem/19237
n, m, k = map(int,input().split())
arr = [list(map(int,input().split())) for _ in range(n)]
shark_move_info = {}
shark_loc = {}
shark_direction = list(map(int,input().split()))
shark_loc_info = [] ## [[[y,x],num, dir], ~, ~] 1,2,3,4.. 순서대로
temp = {}
for i in range(n):
for j in range(n):
if arr[i][j] > 0:
shark_loc[arr[i][j]] = [[i, j]]
for i in range(len(shark_direction)):
shark_loc[i+1].append(i+1)
shark_loc[i+1].append(shark_direction[i])
for i in range(1,m+1):
shark_loc_info.append(shark_loc[i])
dy = [0,-1,1,0,0]
dx = [0,0,0,-1,1]
for num in range(1,m+1):
shark_move_info[num] = []
for _ in range(4):
shark_move_info[num].append(list(map(int,input().split())))
time = 0
arr = [[[0, 0, 0, 0]] * n for _ in range(n)] #shark_num,냄새주인,남은 지속시간, dir
def print_map():
for i in range(n):
for j in range(n):
print(arr[i][j], end=' ')
print()
print()
## 초기 상태 셋팅
for i in range(len(shark_loc_info)):
(y, x), num, dir = shark_loc_info[i]
arr[y][x] = [num, num, k, dir]
shark_loc_info.reverse() ## 4,3,2,1 순서로 뒤집기 ( 덮어쓰기위해)
def smell_decrease():
for i in range(n):
for j in range(n):
a,b,c,d = arr[i][j]
if c >= 2:
arr[i][j] = [a,b,c-1,d]
elif c == 1:
arr[i][j] = [a,0,0,d]
def check_next_dir(y,x, num, current_dir) -> int:
dir_order = shark_move_info[num][current_dir-1]
for k in dir_order:
ny, nx = y + dy[k], x + dx[k]
if ny < 0 or ny >= n or nx < 0 or nx >= n: continue
if arr[ny][nx][2] == 0:
return k
for k in dir_order:
ny, nx = y+dy[k], x + dx[k]
if ny < 0 or ny >= n or nx < 0 or nx >= n : continue
if arr[ny][nx][1] == num:
return k
def move_shark():
global shark_loc_info
global arr
temp = {}
temp2 = []
arr2 = [arr[i][:] for i in range(len(arr))]
for i in range(len(shark_loc_info)):
cord, num, dir = shark_loc_info[i]
y,x = cord[0], cord[1]
next_dir = check_next_dir(y, x, num, dir) # 1~4
ny, nx = y + dy[next_dir], x + dx[next_dir]
arr2[ny][nx] = [num, num, k+1, next_dir]
a, b, c, d = arr[y][x]
arr2[y][x] = [0, b, c, 0]
temp[(ny, nx)] = [num, next_dir]
arr = [arr2[i][:] for i in range(len(arr2))]
for key, v in temp.items():
temp2.append([[key[0], key[1]], v[0], v[1]]) ## [[y,x] , num, dir]
shark_loc_info = temp2
shark_loc_info.sort(key = lambda x:-x[1])
time = 1
while(time < 1001):
move_shark()
smell_decrease()
if len(shark_loc_info) == 1:
break
time += 1
print(-1) if time > 1000 else print(time)