#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";
}
}
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 <= 1000)
{
return;
}
}
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;
}