#include <bits/stdc++.h>
using namespace std;
#define name "IO"
#define int long long
const int inf = 1e18 + 7;
const int maxn = 1e5 + 5;
const int mod = 1e9 + 7;
int r, c, n, sr, sc, gr, gc;
vector<vector<char>> a;
vector<vector<bool>> rs, rg;
int dx[4] = {0, 0, 1, -1};
int dy[4] = {1, -1, 0, 0};
namespace subtask1
{
void solve()
{
priority_queue<pair<int, pair<int, int>>, vector<pair<int, pair<int, int>>>, greater<>> pq;
pq.push({0, {sr, sc}});
vector<vector<int>> dist(r + 1, vector<int>(c + 1, inf));
dist[sr][sc] = 0;
while(!pq.empty())
{
auto [d, cur] = pq.top();
pq.pop();
auto [x, y] = cur;
if(d > dist[x][y]) continue;
for(int i = 0; i < 4; i++)
{
int tx = x + dx[i];
int ty = y + dy[i];
if(tx < 1 || tx > r) continue;
if(ty < 1 || ty > c) continue;
int cur = d;
if(a[tx][ty] == '#') cur++;
if(dist[tx][ty] <= cur) continue;
dist[tx][ty] = cur;
pq.push({cur, {tx, ty}});
}
}
cout << dist[gr][gc] << "\n";
}
}
namespace subtask4
{
void solve()
{
vector<vector<int>> dist(r + 1, vector<int>(c + 1, inf));
dist[sr][sc] = 0;
priority_queue<pair<int, pair<int, int>>, vector<pair<int, pair<int, int>>>, greater<>> q;
q.push({0, {sr, sc}});
while(!q.empty())
{
auto [d, pos] = q.top();
q.pop();
auto [x, y] = pos;
if(d > dist[x][y]) continue;
vector<pair<int, int>> black;
for(int i = 0; i < 4; i++)
{
int tx = x + dx[i];
int ty = y + dy[i];
if(tx < 1 || tx > r) continue;
if(ty < 1 || ty > c) continue;
if(a[tx][ty] == '.' && d < dist[tx][ty])
{
dist[tx][ty] = d;
q.push({dist[tx][ty], {tx, ty}});
}
if(a[tx][ty] == '#') black.push_back({tx, ty});
}
for(auto [u, v] : black)
{
if(dist[u][v] > d + 1)
{
dist[u][v] = d + 1;
q.push({dist[u][v], {u, v}});
int x1 = max(1ll , u - n + 1), y1 = max(1ll, v - n + 1);
int x2 = min(r, u + n - 1), y2 = min(c, v + n - 1);
for(int i = x1; i <= x2; i++)
{
for(int j = y1; j <= y2; j++)
{
if(dist[i][j] > dist[u][v])
{
dist[i][j] = dist[u][v];
q.push({dist[i][j], {i, j}});
}
}
}
}
}
}
cout << dist[gr][gc] << "\n";
}
}
void solve()
{
cin >> r >> c >> n >> sr >> sc >> gr >> gc;
a.resize(r + 1, vector<char>(c + 1));
for(int i = 1; i <= r; i++)
{
for(int j = 1; j <= c; j++) cin >> a[i][j];
}
if(n == 1)
{
subtask1::solve();
return;
}
// if(r * c <= 60000)
// {
// subtask4::solve();
// return;
// }
subtask4::solve();
}
signed main()
{
if(fopen(name".INP","r"))
{
freopen(name".INP","r",stdin);
// freopen(name".OUT","w",stdout);
}
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
clock_t start = clock();
int t = 1;
while(t--) solve();
std::cerr << "Time: " << clock() - start << "ms\n";
return 0;
}