#include <bits/stdc++.h>
using namespace std;
const int dx[]={0, 0, -1, 1, -1, 1, -1, 1}, dy[]={-1, 1, 0, 0, -1, 1, 1, -1};
int n, r, c, sx, sy, ex, ey;
int main ()
{
ios_base :: sync_with_stdio (0);
cin.tie (nullptr);
cin >> r >> c >> n >> sx >> sy >> ex >> ey;
sx--, sy--, ex--, ey--;
vector <string> mat (r);
for (auto &chestie : mat)
cin >> chestie;
vector <vector <int>> viz (r, vector <int> (c, 0));
queue <pair <int, int>> nxt;
vector <pair <int, int>> neigh;
auto isMat = [&] (pair <int, int> a)
{
return a.first>=0 && a.first<r && a.second>=0 && a.second<c;
};
auto dfs = [&] (pair <int, int> crt)
{
if (viz[crt.first][crt.second])
return;
if (mat[crt.first][crt.second]=='#')
{
neigh.push_back (crt);
return;
}
viz[crt.first][crt.second]=1;
for (int d=0;d<4;d++)
{
auto ptr=crt;
ptr.first+=dx[d];
ptr.second+=dy[d];
if (isMat (ptr))
nxt.push (ptr);
}
};
auto sim = [&] (pair <int, int> crt)
{
if (viz[crt.first][crt.second])
return;
viz[crt.first][crt.second]=1;
for (int d=0;d<8;d++)
{
auto ptr=crt;
ptr.first+=dx[d];
ptr.second+=dy[d];
if (isMat (ptr))
{
if (d<4)
nxt.push (ptr);
neigh.push_back (ptr);
}
}
};
dfs ({sx, sy});
int ret=0;
while (true)
{
while (!nxt.empty())
dfs (nxt.front()), nxt.pop ();
if (viz[ex][ey])
break;
ret++;
for (int i=1;i<=n;i++)
{
auto rt=neigh;
neigh.clear ();
for (auto chestie : rt)
sim (chestie);
}
neigh.clear ();
}
cout << ret << "\n";
return 0;
}