#include <bits/stdc++.h>
using namespace std;
const int N = 1000, inf = 1e9;
int n, m, k;
bool a[N][N];
pair<int, int> s, f;
bool check(pair<int, int> p) {
  return (p.first >= 0 && p.first < n && p.second >= 0 && p.second < m &&
          !a[p.first][p.second]);
}
int d[N][N];
void bfs() {
  for (int i = 0; i < n; ++i)
    for (int j = 0; j < m; ++j) d[i][j] = inf;
  queue<pair<int, int> > q;
  d[s.first][s.second] = 0;
  q.push(s);
  while (!q.empty() && d[f.first][f.second] == inf) {
    pair<int, int> p = q.front();
    q.pop();
    pair<int, int> np;
    for (int i = 1; i <= k && check({p.first + i, p.second}); ++i) {
      np = {p.first + i, p.second};
      if (d[np.first][np.second] > d[p.first][p.second] + 1) {
        d[np.first][np.second] = d[p.first][p.second] + 1;
        q.push(np);
      }
    }
    for (int i = 1; i <= k && check({p.first - i, p.second}); ++i) {
      np = {p.first - i, p.second};
      if (d[np.first][np.second] > d[p.first][p.second] + 1) {
        d[np.first][np.second] = d[p.first][p.second] + 1;
        q.push(np);
      }
    }
    for (int i = 1; i <= k && check({p.first, p.second + i}); ++i) {
      np = {p.first, p.second + i};
      if (d[np.first][np.second] > d[p.first][p.second] + 1) {
        d[np.first][np.second] = d[p.first][p.second] + 1;
        q.push(np);
      }
    }
    for (int i = 1; i <= k && check({p.first, p.second - i}); ++i) {
      np = {p.first, p.second - i};
      if (d[np.first][np.second] > d[p.first][p.second] + 1) {
        d[np.first][np.second] = d[p.first][p.second] + 1;
        q.push(np);
      }
    }
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cout.tie(0);
  cin.tie(0);
  cin >> n >> m >> k;
  for (int i = 0; i < n; ++i)
    for (int j = 0; j < m; ++j) {
      char c;
      cin >> c;
      a[i][j] = (c == '#');
    }
  cin >> s.first >> s.second >> f.first >> f.second;
  --s.first;
  --s.second;
  --f.first;
  --f.second;
  bfs();
  int ans = d[f.first][f.second];
  cout << (ans == inf ? -1 : ans) << '\n';
}
