#include <bits/stdc++.h>
using namespace std;
const int maxn = 3e3 + 10;
int M[maxn][maxn], dis[maxn][maxn];
int dx[4] = {0,0,-1,1};
int dy[4] = {1,-1,0,0};
struct nodo{
int ni, mi, t, d;
nodo(int a, int b, int c, int dd){
ni = a, mi = b, d = c, t = dd;
}
};
int main(){
int n,m,k,x0,y0,xf,yf; string a;
cin >> n >> m >> k;
for(int i = 0; i < n; ++i){
cin >> a;
for(int j = 0; j < m; ++j) M[i][j] = (a[i] == '.' ? 1 : 0);
}
cin >> y0 >> x0 >> yf >> xf;
--x0,--y0,--xf,--yf;
memset(dis,-1,sizeof(dis));
queue<nodo> Q;
for(int i = 0; i < 4; ++i)
Q.push(nodo(y0,x0,i,1));
dis[y0][x0] = 0;
while(not Q.empty()){
nodo x = Q.front(); Q.pop();
cout << x.ni << ' ' << x.mi << ' ' << x.d << ' ' << x.t << endl;
for(int i = 0; i < 4; ++i){
int ny = x.ni + dy[i], nx = x.mi + dx[i], nt = (i == x.d ? x.t + 1 : 0);
int sum = (nt > k ? 1 : 0);
if(ny < 0 or ny >= n) continue;
if(nx < 0 or nx >= m) continue;
if(!M[ny][nx]) continue;
if(dis[ny][nx] == -1){
cout << ny << ' ' << nx << ' ' << i << ' ' << nt << endl;
dis[ny][nx] = dis[x.ni][x.mi] + sum;
if(sum) Q.push(nodo(ny,nx,i,0));
else Q.push(nodo(ny,nx,i,nt + 1));
}
}
if(dis[yf][xf] != -1) break;
}
cout << dis[yf][xf];
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmNvbnN0IGludCBtYXhuID0gM2UzICsgMTA7CmludCBNW21heG5dW21heG5dLCBkaXNbbWF4bl1bbWF4bl07CmludCBkeFs0XSA9IHswLDAsLTEsMX07CmludCBkeVs0XSA9IHsxLC0xLDAsMH07CnN0cnVjdCBub2RvewogICAgICAgIGludCBuaSwgbWksIHQsIGQ7CiAgICAgICAgbm9kbyhpbnQgYSwgaW50IGIsIGludCBjLCBpbnQgZGQpewogICAgICAgICAgICAgICAgbmkgPSBhLCBtaSA9IGIsIGQgPSBjLCB0ID0gZGQ7CiAgICAgICAgfQp9OwppbnQgbWFpbigpewogICAgICAgIGludCBuLG0sayx4MCx5MCx4Zix5Zjsgc3RyaW5nIGE7CiAgICAgICAgY2luID4+IG4gPj4gbSA+PiBrOwogICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBuOyArK2kpewogICAgICAgICAgICAgICAgY2luID4+IGE7CiAgICAgICAgICAgICAgICBmb3IoaW50IGogPSAwOyBqIDwgbTsgKytqKSBNW2ldW2pdID0gKGFbaV0gPT0gJy4nID8gMSA6IDApOwogICAgICAgIH0KICAgICAgICBjaW4gPj4geTAgPj4geDAgPj4geWYgPj4geGY7CiAgICAgICAgLS14MCwtLXkwLC0teGYsLS15ZjsKICAgICAgICBtZW1zZXQoZGlzLC0xLHNpemVvZihkaXMpKTsKICAgICAgICBxdWV1ZTxub2RvPiBROwogICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCA0OyArK2kpCiAgICAgICAgICAgICAgICBRLnB1c2gobm9kbyh5MCx4MCxpLDEpKTsKICAgICAgICBkaXNbeTBdW3gwXSA9IDA7CiAgICAgICAgd2hpbGUobm90IFEuZW1wdHkoKSl7CiAgICAgICAgICAgICAgICBub2RvIHggPSBRLmZyb250KCk7IFEucG9wKCk7CgkJCSAgICBjb3V0IDw8IHgubmkgPDwgJyAnIDw8IHgubWkgPDwgJyAnIDw8IHguZCA8PCAnICcgPDwgeC50IDw8IGVuZGw7CiAgICAgICAgICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgNDsgKytpKXsKICAgICAgICAgICAgICAgICAgICAgICAgaW50IG55ID0geC5uaSArIGR5W2ldLCBueCA9IHgubWkgKyBkeFtpXSwgbnQgPSAoaSA9PSB4LmQgPyB4LnQgKyAxIDogMCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdW0gPSAobnQgPiBrID8gMSA6IDApOwogICAgICAgICAgICAgICAgICAgICAgICBpZihueSA8IDAgb3IgbnkgPj0gbikgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKG54IDwgMCBvciBueCA+PSBtKSBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYoIU1bbnldW254XSkgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGRpc1tueV1bbnhdID09IC0xKXsKICAgICAgICAgICAgICAgICAgICAgICAgCQljb3V0IDw8IG55IDw8ICcgJyA8PCBueCA8PCAnICcgPDwgaSA8PCAnICcgPDwgbnQgPDwgZW5kbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNbbnldW254XSA9IGRpc1t4Lm5pXVt4Lm1pXSArIHN1bTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihzdW0pIFEucHVzaChub2RvKG55LG54LGksMCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgUS5wdXNoKG5vZG8obnksbngsaSxudCArIDEpKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYoZGlzW3lmXVt4Zl0gIT0gLTEpIGJyZWFrOwogICAgICAgIH0KICAgICAgICBjb3V0IDw8IGRpc1t5Zl1beGZdOwogICAgcmV0dXJuIDA7Cn0KCg==