#include <iostream>
#include <cstdio>
#include <queue>
using namespace std;
struct tri
{
int x,y,d;
};
queue <tri> q;
int a[55][55],i,j,v[55][55][100],n,m,k,divizori,x1,y1,x2,y2,numar[100];
int dx[]={0, 1, 0, -1};
int dy[]={1, 0, -1, 0};
int cmmdc(int a, int b)
{
if (b==0) return a;
else return cmmdc(b,a%b);
}
void lee()
{
int i,d,indiced,indicediv,div;
tri el;
d=cmmdc(a[x1][y1],k);
indiced=numar[d];
q.push({x1,y1,d});
v[x1][y1][indiced]=1;
while (!q.empty())
{
el=q.front();
q.pop();
for (i=0; i<=3; i++)
{
x1=el.x+dx[i];
y1=el.y+dy[i];
if (a[x1][y1]>0)
{
div=cmmdc(el.d,k);
indicediv=numar[div];
if (div==el.d) //or
//(v[x1][y1][indicediv]>0 && v[el.x][el.y][numar[el.d]]+1<v[x1][y1][indicediv]))
a[el.x][el.y]=0;
else v[x1][y1][indicediv]++;
}
}
}
printf("%d\n",v[n][m][divizori]);
}
int main()
{
freopen("kdrum.in","r",stdin);
freopen("kdrum.out","w",stdout);
scanf("%d%d%d%d%d%d%d",&n,&m,&k,&x1,&y1,&x2,&y2);
for (i=1; i<=n; i++)
for (j=1; j<=m; j++)
scanf("%d",&a[i][j]);
for (i=1; i<=k; i++)
if (k%i==0)
{
divizori++;
numar[i]=divizori;
}
lee();
return 0;
}