#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll r,c,n;
ll calc(ll i, ll j) {
return i*c+j;
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> r >> c >> n;
ll s1,s2,g1,g2;
cin >> s1 >> s2 >> g1 >> g2;
s1--; s2--; g1--; g2--;
vector<string> a(r);
for (int i=0; i<r; i++) {
cin >> a[i];
}
vector<ll> dist(r*c, 1e18);
vector<ll> dist1(r*c, 1e18);
deque<ll> dq, sq;
dq.push_front(calc(s1, s2));
dist[calc(s1,s2)] = 0;
dist1[calc(s1,s2)]=0;
sq.push_back(calc(s1,s2));
vector<ll> di = {-1, 1, 0, 0};
vector<ll> dj = {0, 0, -1, 1};
vector<ll> di1 = {-1, -1, -1, 0, 0, 1, 1, 1};
vector<ll> dj1 = {-1, 0, 1, -1, 1, -1, 0, 1};
ll d = 0;
while(!dq.empty()) {
if (dist[calc(g1,g2)]<=d) break;
while(!dq.empty() && dist[dq.front()]==d) {
ll u = dq.front();
dq.pop_front();
ll i = u/c; ll j = u%c;
if (dist1[u]>0) {
dist1[u] = 0;
sq.push_back(u);
}
for (int idx=0; idx<4; idx++) {
ll i1 = i+di[idx];
ll j1 = j+dj[idx];
if (i1>=0 && i1<r && j1>=0 && j1<c) {
ll pos = i1*c+j1;
if (a[i1][j1]=='.' && dist[pos]>d) {
dist[pos] = d;
dq.push_front(pos);
}
if (dist1[pos]>0) {
dist1[pos] = 0;
sq.push_back(pos);
}
}
}
}
while(!sq.empty()) {
ll u = sq.front();
sq.pop_front();
ll i = u/c; ll j = u%c;
if (dist[u] > d + 1) {
dist[u] = d + 1;
dq.push_back(u);
}
if (dist1[u]>=n-1) continue;
for (int idx=0; idx<8; idx++) {
ll i1 = i+di1[idx];
ll j1 = j+dj1[idx];
if (i1>=0 && i1<r && j1>=0 && j1<c) {
ll v = i1*c+j1;
if (dist1[v]>dist1[u]+1) {
dist1[v] = dist1[u]+1;
sq.push_back(v);
}
}
}
}
d++;
}
cout << dist[calc(g1,g2)] << "\n";
}