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] = in2matrix=[[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)