def solution(m,n,matrix,in3,begin):
a = [] # 标记已经参观过的是热门还是普通
ans=[]
hashtable = []
def route(i, j,k):
hashtable.append((i, j))
a.append(k)
if matrix[i][j] != k:
return
if len(a) == n * m:
ans.append(1)
return
dd=in3[len(a)]
for x, y in ((i+1,j),(i-1,j),(i,j-1),(i,j+1)):
if 0 <= x < n and 0 <= y < m and (x, y) not in hashtable:
route(x, y, dd)
hashtable.pop()
a.pop(-1)
return
for i in (0,n-1):
for j in range(m):
route(i,j,begin)
if hashtable!=[]:
hashtable.pop()
if a!=[]:
a.pop(-1)
for j in (0,m-1):
for i in range(1,n-1):
route(i,j,begin)
if hashtable!=[]:
hashtable.pop()
if a!=[]:
a.pop(-1)
return len(ans)
in1 = input().split(' ')
n = int(in1[0])
m = int(in1[1])
matrix = [[0] * m for _ in range(n)]
for i in range(n):
in2 = input().split(' ')
matrix[i] = in2
matrix=[[int(x) for x in matrix[i]]for i in range(n)]
in3 = input().split(' ')
in3=[int(x) for x in in3]
begin = in3[0]
if sum(sum(matrix[i]) for i in range(n))!=sum(in3):
print(0)
else:
ans=solution(m,n,matrix,in3,begin)
print(ans% 11192869)