#include<stdio.h>
#define infile "kdrum.in"
#define outfile "kdrum.out"
#define nmax 51
#define mmax 51
#define cmax (nmax*mmax)
#define inf (1<<15)
const int ii[]={-1,0,1,0};
const int jj[]={0,-1,0,1};
struct coada { int i,j; };
int x[nmax][mmax]; //matricea cu drumul
int y[nmax][mmax]; //matricea in care calculez mereu
int si,sj,fi,fj; //coordonatele de plecare respectiv sosire
int n,m; //numarul de linii, respectiv coloane
int k; //valoarea cu care trebuie sa fie divizibil produsul drumului ;))
int dmin=inf; //variabila in care vom avea distanta minima
void citire(int x[nmax][mmax], int *n, int *m, int *k, int *si, int *sj, int *fi, int *fj)
{
int i,j;
scanf("%d %d %d\n",n,m,k);
scanf("%d %d %d %d\n",si,sj,fi,fj);
for(i=1;i<=*n;i++)
for(j=1;j<=*m;j++)
scanf("%d",&x[i][j]);
}
//goleste matricea
void golire(int x[nmax][mmax], int n, int m)
{
int i,j;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
x[i][j]=0;
}
//calculeaza matricea de timp...pt punctul de plecare i,j
void drum_minim(int x[nmax][mmax], int y[nmax][mmax], int n, int m, int i, int j)
{
golire(y,n,m); //golim matricea in care vom lucra
int xi,xj,t;
struct coada c[cmax]; //coada
int st,dr,e; //variabilele cozii
st=dr=e=1; c[1].i=i; c[1].j=j; //initializam coada
while(e) //cat timp avem elemente in coada
{
xi=c[st%cmax].i; xj=c[st%cmax].j;
for(t=0;t<4;t++)
{
i=xi+ii[t]; j=xj+jj[t]; //pozitia vecinului :P
if(i>0&&i<=n&&j>0&&j<=m&&x[i][j]&&(y[xi][xj]+1<y[i][j] || !y[i][j])) //daca punctul se afla in matrice...si daca ajungem cu cost mai mic...sau ajungem pt prima data
{
y[i][j]=y[xi][xj]+1; //salvam costul
dr++;e++; //facem loc in coada
c[dr%cmax].i=i; c[dr%cmax].j=j; //salvam pozitia in coada
}
}
e--; st++; //inaintam in coada
}
}
int main()
{
int i,j,d;
freopen(infile,"r",stdin);
freopen(outfile,"w",stdout);
citire(x,&n,&m,&k,&si,&sj,&fi,&fj); //citim datele din fisier
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if(x[i][j]&&!(x[i][j]%k)) //inseamna ca daca drumul trece pe aici....produsul va fi divizibil cu k
{
drum_minim(x,y,n,m,i,j);
d=y[si][sj]+y[fi][fj]+1;
if(d<dmin) dmin=d; //am gasit un drum mai mic...il salvam
}
printf("%d",dmin); //afisem drumul minimc
fclose(stdin);
fclose(stdout);
return 0;
}