#include<stdio.h>
#define N 55
const int dx[]={0,0,-1,1};
const int dy[]={1,-1,0,0};
int a[N][N],nr[N][N],n,m,k,p1[N][N],d[N][N],ok,min=N*N,f;
void bfs1(int x0[2])
{
int coada[N*N][2],x[2],y[2],u,p;
u=p=0;
coada[u][0]=x0[0];
coada[u++][1]=x0[1];
nr[x0[0]][x0[1]]=1;
p1[x0[0]][x0[1]]=1;
d[x0[0]][x0[1]]=1;
while (u!=p)
{
x[0]=coada[p][0];
x[1]=coada[p++][1];
for (int i=0; i<4; ++i)
{
y[0]=x[0]+dx[i];
y[1]=x[1]+dy[i];
if (d[y[0]][y[1]]==1+d[x[0]][x[1]])
nr[y[0]][y[1]]=nr[y[0]][y[1]]+nr[x[0]][x[1]];
if (!d[y[0]][y[1]]&&a[y[0]][y[1]])
{
coada[u][0]=y[0];
coada[u++][1]=y[1];
nr[y[0]][y[1]]=nr[x[0]][x[1]];
if (p1[x[0]][x[1]]%k)
p1[y[0]][y[1]]*=p1[x[0]][x[1]];
else
{
ok=1;
p1[y[0]][y[1]]=p1[x[0]][x[1]];
}
d[y[0]][y[1]]=1+d[x[0]][x[1]];
}
}
}
}
void bfs2(int x0[2],int y0[2])
{
int coada[N*N][2],x[2],y[2],u,p;
u=p=0;
coada[u][0]=x0[0];
coada[u++][1]=x0[1];
--nr[x0[0]][x0[1]];
p1[x0[0]][x0[1]]=1;
d[x0[0]][x0[1]]=1;
while (u!=p)
{
x[0]=coada[p][0];
x[1]=coada[p++][1];
for (int i=0; i<4; ++i)
{
y[0]=x[0]+dx[i];
y[1]=x[1]+dy[i];
if (nr[y[0]][y[1]]&&!d[y[0]][y[1]])
{
coada[u][0]=y[0];
coada[u++][1]=y[1];
--nr[y[0]][y[1]];
if (p1[x[0]][x[1]]%k)
p1[y[0]][y[1]]*=p1[x[0]][x[1]];
else
{
ok=1;
p1[y[0]][y[1]]=p1[x[0]][x[1]];
}
d[y[0]][y[1]]=1+d[x[0]][x[1]];
}
}
if (d[y0[0]][y0[1]])
{
--nr[y0[0]][y0[1]];
if (p1[y0[0]][y0[1]]%k==0)
if (min>d[y0[0]][y0[1]])
min=d[y0[0]][y0[1]];
}
}
}
void citire()
{
int x[2],y[2];
freopen("kdrum.in","r",stdin);
freopen("kdrum.out","w",stdout);
scanf("%d%d%d%d%d%d%d",&n,&m,&k,&x[0],&x[1],&y[0],&y[1]);
for (int i=1; i<=n; ++i)
for (int j=1; j<=m; ++j)
{
scanf("%d",&a[i][j]);
p1[i][j]=a[i][j];
if (!a[i][j]) ++f;
}
for (int i=0;i<=n+1; ++i)
{
d[0][1]=nr[0][i]=-1;
d[n+1][i]=nr[n+1][i]=-1;
}
for (int i=0; i<=m+1; ++i)
{
d[i][0]=nr[i][0]=-1;
d[i][m+1]=nr[i][m+1]=-1;
}
bfs1(x);
if (p1[y[0]][y[1]]%k==0 || ok)
printf("%d\n",d[y[0]][y[1]]);
else
{
for (int i=1; i<=n; ++i) for (int j=1; j<=m; ++j) {p1[i][j]=a[i][j];d[i][j]=0;}
while (nr[y[0]][y[1]])
{
nr[x[0]][x[1]]=1;
bfs2(x,y);
}
if (min == 3025) printf("%d\n",m*n-f);else
printf("%d\n",min);
}
}
void afis()
{
for (int i=1; i<=n; ++i)
{
for (int j=1; j<=m; ++j)
printf("%d ",p1[i][j]);
printf("\n");
}
printf("\n\n");
for (int i=1; i<=n; ++i)
{
for (int j=1; j<=m; ++j)
printf("%d ",nr[i][j]);
printf("\n");
}
}
int main()
{
citire();
//afis();
return 0;
}