#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <queue>
using namespace std;
#define x first
#define y second
const int N = 1010;
typedef long long LL;
typedef pair<int, int> PII;
char g[N][N];
int dist[N][N];
int n, m, k, x1, x2, y1, y2;
int dx[4] = {1, 0, -1, 0};
int dy[4] = {0, 1, -1, 0};
int bfs(PII start, PII target)
{
if (start == target) return 0;
queue<PII> q;
q.push(start);
memset(dist, 0x3f, sizeof dist);
dist[start.x][start.y] = 0;
int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};
while(q.size())
{
auto t = q.front();
q.pop();
for (int i = 0; i < 4; i ++ )
for (int j = 1; j <= k; j ++ )
{
int x = t.x + dx[i] * j, y = t.y + dy[i] * j;
if (x < 0 || x >= n || y < 0 || y >= m || g[x][y] == '#') break;
if (dist[x][y] < dist[t.x][t.y] + 1) break;
if (dist[x][y] > dist[t.x][t.y] + 1)
{
dist[x][y] = dist[t.x][t.y] + 1;
if (x == target.x && y == target.y)
return dist[x][y];
q.push({x, y});
}
}
}
return -1;
}
int main()
{
cin>>n>>m>>k;
for(int i = 0; i < n; i++) scanf("%s", g[i]);
int sx, sy, tx, ty;
scanf("%d%d%d%d", &sx, &sy, &tx, &ty);
printf("%d\n", bfs({sx - 1, sy - 1}, {tx - 1, ty - 1}));
return 0;
}