#include<bits/stdc++.h>

using namespace std;

#define ll long long
#define inf (1LL<<62)
#define ff first
#define ss second

int n, m, l, t;
char s[3005][3005];
deque<pair<ll,int>>q[3005];
ll dp[3005][3005];

int main()
{
    ios_base::sync_with_stdio(false); cin.tie(NULL);

    cin>>n>>m>>l>>t;

    for(int i=0; i<n; i++){
        cin>>s[i];
    }

    for(int i=0; i<n; i++){
        for(int j=0; j<m; j++){
            dp[i][j]=inf;
        }
    }

    dp[0][0]=0;
    q[m].push_back({0,0});//horizontal queue
    q[0].push_back({0,0});//0 -> m-1 vertical queue

    for(int i=0; i<n; i++){
        for(int j=(i==0)?1:0; j<m; j++){
            if(s[i][j]=='#'){
                while(!q[m].empty()) q[m].pop_back();
                while(!q[j].empty()) q[j].pop_back();
                continue;
            }

            while(!q[m].empty() && q[m].front().ss<j-l){
                q[m].pop_front();
            }
            while(!q[j].empty() && q[j].front().ss<i-l){
                q[j].pop_front();
            }

            int x=-1, y=-1;
            if(!q[m].empty()) y=q[m].front().ss;
            if(!q[j].empty()) x=q[j].front().ss;

            if(y!=-1) dp[i][j]=min(dp[i][j],dp[i][y]+t+(j-y));
            if(x!=-1) dp[i][j]=min(dp[i][j],dp[x][j]+t+(i-x));

            if(dp[i][j]<inf){
                while(!q[m].empty() && q[m].back().ff>=dp[i][j]-j) q[m].pop_back();
                q[m].push_back({dp[i][j]-j,j});
                while(!q[j].empty() && q[j].back().ff>=dp[i][j]-i) q[j].pop_back();
                q[j].push_back({dp[i][j]-i,i});
            }
        }

        while(!q[m].empty()) q[m].pop_front();
    }

    if(dp[n-1][m-1]==inf) cout<<-1<<'\n';
    else cout<<dp[n-1][m-1]<<'\n';

    return 0;
}