const vx:array[1..4] of longint=(0,0,1,-1);
vy:array[1..4] of longint=(1,-1,0,0);
var fol:array[0..50,0..50,0..12000] of boolean;
a:array[0..51,0..51] of longint;
f,g:text;
n,m,j,k,x1,x2,y1,y2,i,min:longint;
procedure rec(x1,y1,pas,r:longint);
var i:longint;
begin
r:=(r*a[x1,y1]) mod k;
if (x1=x2) and (y1=y2) and (r=0) then begin
if min>pas then
min:=pas;
exit;
end;
if a[x1,y1]<>0 then begin
if fol[x1,y1,r]=false then begin
fol[x1,y1,r]:=true;
for i:=1 to 4 do
if pas+1<min then
rec(x1+vx[i],y1+vy[i],pas+1,r);
fol[x1,y1,r]:=false;
end;
end;
end;
begin
assign(f,'kdrum.in'); reset(f);
assign(g,'kdrum.out'); rewrite(g);
read(f,n,m,k);
min:=maxlongint;
read(f,x1,y1,x2,y2);
for i:=1 to n do
for j:=1 to m do
read(f,a[i,j]);
rec(x1,y1,1,1);
writeln(g,min);
close(f); close(g);
end.