#include<bits/stdc++.h>
using namespace std;
#define int long long
#define inf (int)2e18
#define nl '\n'
const int N = 360;
int a[N][N], pk[N][N], pl[N][N];
unordered_map<int, bool> vis[N][N][N];
int n, m, k, l, tx, ty;
vector<pair<int,int>> v = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
bool valid(int xk, int yk, int xl, int yl){
if(xk < 0 or xk >= n or yk < 0 or yk+k-1 >= m or xl < 0 or xl+l-1 >= n or yl < 0 or yl >= m) return 0;
if(pk[xk][yk+k-1] - (yk == 0 ? 0 : pk[xk][yk-1])) return 0;
if(pl[xl+l-1][yl] - (xl == 0 ? 0 : pl[xl-1][yl])) return 0;
return xl <= xk and xl+l-1 >= xk and yl >= yk and yl <= yk+k-1;
}
bool dfs(int xk, int yk, int xl, int yl){
vis[xk][yk][xl][yl] = 1;
if(xk == tx and yl == ty) return 1;
for(auto &[i, j] : v){
int nxk = xk + i, nyk = yk + j;
if(valid(nxk, nyk, xl, yl) and !vis[nxk][nyk][xl][yl] and dfs(nxk, nyk, xl, yl)) return 1;
}
for(auto &[i, j] : v){
int nxl = xl + i, nyl = yl + j;
if(valid(xk, yk, nxl, nyl) and !vis[xk][yk][nxl][nyl] and dfs(xk, yk, nxl, nyl)) return 1;
}
return 0;
}
void solve(){
int yk, xk, yl, xl;
cin>>m>>n>>k>>l>>yk>>xk>>yl>>xl;
string a[n];
for(int i = 0; i < n; i++){
cin>>a[i];
for(int j = 0; j < m; j++){
if(a[i][j] == '*'){
tx = i;
ty = j;
}
pk[i][j] = (j == 0 ? 0 : pk[i][j-1]) + (a[i][j] == 'X');
pl[i][j] = (i == 0 ? 0 : pl[i-1][j]) + (a[i][j] == 'X');
}
}
cout<<(dfs(xk, yk, xl, yl) ? "YES" : "NO");
}
signed main(){
ios_base::sync_with_stdio(0);
cin.tie(NULL);cout.tie(NULL);
int t = 1;
//cin>>t;
while(t--) solve();
return 0;
}