#include <bits/stdc++.h>

using namespace std;
#define int long long
int32_t main()
{
    ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    int n,m,k;
    cin>>n>>m>>k;
    int x1,y1,x2,y2;
    cin>>x1>>y1>>x2>>y2;
    x1--;y1--;x2--;y2--;
    bool c[n][m];
    for(int i=0;i<n;++i){
        string s;
        cin>>s;
        for(int j=0;j<m;++j)
        {
            if(s[j]=='.')
            {
                c[i][j]=false;
            }
            else
            {
                c[i][j]=true;
            }
        }
    }
    int is[n][m];
    bool used[n][m];
    deque <pair<int,int> > q;
    for(int i=0;i<n;++i)
    {
        for(int j=0;j<m;++j)
        {
            used[i][j]=false;
            is[i][j]=1e18;
        }
    }
    is[x1][y1]=0;
    used[x1][y1]=true;
    q.push_back({x1,y1});
    while(!q.empty())
    {
        deque <pair<int,int> > q1;
        while(!q.empty())
        {
            pair <int,int> h=q.front();
            int x=h.first;int y=h.second;
            q.pop_front();
            //cout<<x<<" "<<y<<" xy "<<endl;
            for(int i=1;i<=k;++i)
            {
                if((x+i)>=n)
                {
                    break;
                }
                if(is[x+i][y]<=is[x][y])
                {
                    break;
                }
                if(c[x+i][y])
                {
                    break;
                }
                if(!used[x+i][y])
                {
                    used[x+i][y]=true;
                    is[x+i][y]=is[x][y]+1;
                    q1.push_back({x+i,y});
                }
            }
            for(int i=1;i<=k;++i)
            {
                if((y+i)>=m)
                {
                    break;
                }
                if(is[x][y+i]<=is[x][y])
                {
                    break;
                }
                if(c[x][y+i])
                {
                    break;
                }
                if(!used[x][y+i])
                {
                    used[x][y+i]=true;
                    is[x][y+i]=is[x][y]+1;
                    q1.push_back({x,y+i});
                }
            }
            for(int i=1;i<=k;++i)
            {
                if((x-i)<0)
                {
                    break;
                }
                if(is[x-i][y]<=is[x][y])
                {
                    break;
                }
                if(c[x-i][y])
                {
                    break;
                }
                if(!used[x-i][y])
                {
                    used[x-i][y]=true;
                    is[x-i][y]=is[x][y]+1;
                    q1.push_back({x-i,y});
                }
            }
            for(int i=1;i<=k;++i)
            {
                if((y-i)<0)
                {
                    break;
                }
                if(is[x][y-i]<=is[x][y])
                {
                    break;
                }
                if(c[x][y-i])
                {
                    break;
                }
                if(!used[x][y-i])
                {
                    used[x][y-i]=true;
                    is[x][y-i]=is[x][y]+1;
                    q1.push_back({x,y-i});
                }
            }
        }
        q=q1;
    }
    if(is[x2][y2]==1e18)
    {
        cout<<(-1);
    }
    else
    {
        cout<<is[x2][y2];
    }
    return 0;
}


Measured memory_bytes: 17024