E=enumerate
def S(b,x,y):
q=[(x,y,0,0,b[x][y],[(x,y)])]
while q:
n,m,j,k,t,p=q.pop(0)
for X,Y in[(1,0),(-1,0),(0,1),(0,-1)]:
N=n+X;M=m+Y;F=0;J=j;K=k
if(A:=N<0)or M<0:J,K=j+A,k-(M<0);yield J,K,0;N=[N,len(b)-1][A];M=[M,len(b[0])-1][Y<0];F=1
elif(A:=N>=len(b))+(B:=M>=len(b[0])):J,K=j-A,k+B;yield J,K,0;N*=1-A;M*=1-B;F=1
if((N,M)==(x,y))*(Z:=1>(z:=b[N][M])or t):yield J,K,1,p
elif(Z+F)*~-((N,M)in p):q+=(N,M,*([[J,K],[0,0]][z<1>F and t]),z,p+[(N,M)]),
def f(t,b):
for x,a in E(b):
for y,_ in E(a):
K={0:set(),1:set()};g,h=t
for z,v,F,*_ in S(b,x,y):
if((v,z)==t)>F:return 1
if F:K[0].add(v);K[1].add(z)
if any(all([[(g<0)==(G<0),g%G<1]if G else[0],[G==0]][g==0]+[[(h<0)==(H<0),h%H<1]if H else[0],[H==0]][h==0])for G in K[0]for H in K[1]):return 1
return 0
#note: times out on the largest test cases
print(f((-2,0),[[1, 0, 0, 1], [1, 0, 0, 1], [1, 0, 0, 1]]))
print(f((0, 2), [[1, 0, 1], [0, 1, 0], [1, 0, 1]]))
#print(f((2, 2), [[1, 0, 1, 1, 1, 1, 1, 1, 1], [1, 1, 0, 0, 0, 1, 0, 1, 1], [1, 1, 1, 0, 1, 0, 1, 0, 1], [0, 1, 0, 1, 1, 1, 1, 1, 0], [1, 0, 1, 1, 1, 1, 1, 1, 1]]))
print(f((-2, -2), [[0, 0, 0, 1], [1, 0, 0, 1], [1, 0, 0, 1]]))
print(f((100, 100), [[1, 1, 1, 1], [1, 0, 0, 0], [1, 0, 0, 0], [1, 0, 0, 0]]))
print(f((1, -1), [[0, 0, 1, 0, 0], [0, 0, 1, 0, 0], [1, 1, 1, 1, 1], [0, 0, 1, 0, 0], [0, 0, 1, 0, 0]]))
print(f((-123, 456), [[0, 0, 1, 0, 0], [1, 1, 1, 0, 0], [0, 0, 1, 1, 1], [0, 0, 1, 0, 0]]))
#print(f((-200, 100), [[1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0], [0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1], [1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0], [1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0], [1, 1, 0, 1, 1, 1, 0, 1, 1, 1 ,1 ,1 ,0], [0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0]]))
RT1lbnVtZXJhdGUKZGVmIFMoYix4LHkpOgogcT1bKHgseSwwLDAsYlt4XVt5XSxbKHgseSldKV0KIHdoaWxlIHE6CiAgbixtLGosayx0LHA9cS5wb3AoMCkKICBmb3IgWCxZIGluWygxLDApLCgtMSwwKSwoMCwxKSwoMCwtMSldOgogICBOPW4rWDtNPW0rWTtGPTA7Sj1qO0s9awogICBpZihBOj1OPDApb3IgTTwwOkosSz1qK0Esay0oTTwwKTt5aWVsZCBKLEssMDtOPVtOLGxlbihiKS0xXVtBXTtNPVtNLGxlbihiWzBdKS0xXVtZPDBdO0Y9MQogICBlbGlmKEE6PU4+PWxlbihiKSkrKEI6PU0+PWxlbihiWzBdKSk6SixLPWotQSxrK0I7eWllbGQgSixLLDA7Tio9MS1BO00qPTEtQjtGPTEKICAgaWYoKE4sTSk9PSh4LHkpKSooWjo9MT4oejo9YltOXVtNXSlvciB0KTp5aWVsZCBKLEssMSxwCiAgIGVsaWYoWitGKSp+LSgoTixNKWluIHApOnErPShOLE0sKihbW0osS10sWzAsMF1dW3o8MT5GIGFuZCB0XSkseixwK1soTixNKV0pLApkZWYgZih0LGIpOgogZm9yIHgsYSBpbiBFKGIpOgogIGZvciB5LF8gaW4gRShhKToKICAgSz17MDpzZXQoKSwxOnNldCgpfTtnLGg9dAogICBmb3Igeix2LEYsKl8gaW4gUyhiLHgseSk6CiAgICBpZigodix6KT09dCk+RjpyZXR1cm4gMQogICAgaWYgRjpLWzBdLmFkZCh2KTtLWzFdLmFkZCh6KQogICBpZiBhbnkoYWxsKFtbKGc8MCk9PShHPDApLGclRzwxXWlmIEcgZWxzZVswXSxbRz09MF1dW2c9PTBdK1tbKGg8MCk9PShIPDApLGglSDwxXWlmIEggZWxzZVswXSxbSD09MF1dW2g9PTBdKWZvciBHIGluIEtbMF1mb3IgSCBpbiBLWzFdKTpyZXR1cm4gMQogcmV0dXJuIDAKIAojbm90ZTogdGltZXMgb3V0IG9uIHRoZSBsYXJnZXN0IHRlc3QgY2FzZXMKcHJpbnQoZigoLTIsMCksW1sxLCAwLCAwLCAxXSwgWzEsIDAsIDAsIDFdLCBbMSwgMCwgMCwgMV1dKSkKcHJpbnQoZigoMCwgMiksIFtbMSwgMCwgMV0sIFswLCAxLCAwXSwgWzEsIDAsIDFdXSkpCiNwcmludChmKCgyLCAyKSwgW1sxLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxXSwgWzEsIDEsIDAsIDAsIDAsIDEsIDAsIDEsIDFdLCBbMSwgMSwgMSwgMCwgMSwgMCwgMSwgMCwgMV0sIFswLCAxLCAwLCAxLCAxLCAxLCAxLCAxLCAwXSwgWzEsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDFdXSkpCnByaW50KGYoKC0yLCAtMiksIFtbMCwgMCwgMCwgMV0sIFsxLCAwLCAwLCAxXSwgWzEsIDAsIDAsIDFdXSkpCnByaW50KGYoKDEwMCwgMTAwKSwgW1sxLCAxLCAxLCAxXSwgWzEsIDAsIDAsIDBdLCBbMSwgMCwgMCwgMF0sIFsxLCAwLCAwLCAwXV0pKQpwcmludChmKCgxLCAtMSksIFtbMCwgMCwgMSwgMCwgMF0sIFswLCAwLCAxLCAwLCAwXSwgWzEsIDEsIDEsIDEsIDFdLCBbMCwgMCwgMSwgMCwgMF0sIFswLCAwLCAxLCAwLCAwXV0pKQpwcmludChmKCgtMTIzLCA0NTYpLCBbWzAsIDAsIDEsIDAsIDBdLCBbMSwgMSwgMSwgMCwgMF0sIFswLCAwLCAxLCAxLCAxXSwgWzAsIDAsIDEsIDAsIDBdXSkpCiNwcmludChmKCgtMjAwLCAxMDApLCBbWzEsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDEsIDAsIDEsIDEsIDBdLCBbMCwgMSwgMSwgMSwgMCwgMSwgMSwgMSwgMCwgMSwgMCwgMCwgMV0sIFsxLCAxLCAxLCAxLCAxLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAwXSwgWzEsIDEsIDEsIDEsIDEsIDEsIDAsIDEsIDEsIDEsIDEsIDEsIDBdLCBbMSwgMSwgMCwgMSwgMSwgMSwgMCwgMSwgMSwgMSAsMSAsMSAsMF0sIFswLCAwLCAxLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAxLCAwLCAwXV0pKQ==