#include<iostream>
#include<stdio.h>
FILE *f=fopen("kdrum.in","r"),*g=fopen("kdrum.out","w");
int x[]={0,0,1,-1},y[]={1,-1,0,0},x_start,y_start,x_finish,y_finish;
long a[53][53],k,n,m,i,j;long lng=1,k1=1,min=2000000;int dir;
int valid(int dir,int dir1)
{
if(dir==0&&dir1==1) return 0;
if(dir==1&&dir1==0) return 0;
if(dir==2&&dir1==3) return 0;
if(dir==3&&dir1==2) return 0;
return 1;
}
void back(int x1,int y1)
{
long lng1,xval,k2,x2,y2,dir1;
for(xval=0;xval<4;xval++)
{
x2=x1+x[xval];
y2=y1+y[xval];
dir1=dir;
dir=xval;
if(a[x2][y2]&&lng+1<min&&valid(dir,dir1))
{
lng1=lng++;
k2=k1;
k1=(k1*a[x2][y2])%k;
if(x2==x_finish&&y2==y_finish&&!k1)
{
if(lng<min)
{
min=lng;
lng=lng1;
k1=k2;
}
}
else
{
back(x2,y2);
lng=lng1;
k1=k2;
}
}
dir=dir1;
}
}
int main()
{
fscanf(f,"%ld%ld%ld%ld%ld%ld%ld",&n,&m,&k,&x_start,&y_start,&x_finish,&y_finish);
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
fscanf(f,"%ld",&a[i][j]);
for(i=0;i<=n+1;i++)
a[i][0]=a[i][n+1]=0;
for(i=0;i<=m+1;i++)
a[0][i]=a[m+1][i]=0;
back(x_start,y_start);
fprintf(g,"%ld\n",min);
return 0;
}