#include <bits/stdc++.h>
using namespace std;
int n, m, sx, sy, l, r, vis[2005][2005];
char mp[2005][2005];
int Next[][2] = {1, 0, -1, 0, 0, 1, 0, -1};
struct node {
  int x, y, l, r;
};
int bfs(int x, int y) {
  int tx, ty, ans = 1;
  node p;
  deque<node> q;
  q.push_front({x, y, 0, 0});
  vis[x][y] = 1;
  while (!q.empty()) {
    p = q.front();
    q.pop_front();
    for (int i = 0; i < 4; i++) {
      if (i == 0 || i == 1) {
        tx = p.x + Next[i][0];
        ty = p.y + Next[i][1];
        if (tx > 0 && tx <= n && ty > 0 && ty <= m && !vis[tx][ty] &&
            mp[tx][ty] == '.') {
          q.push_front({tx, ty, p.l, p.r});
          vis[tx][ty] = 1;
          ans++;
        }
      } else if (i == 2 && p.r < r) {
        tx = p.x + Next[i][0];
        ty = p.y + Next[i][1];
        if (tx > 0 && tx <= n && ty > 0 && ty <= m && !vis[tx][ty] &&
            mp[tx][ty] == '.') {
          q.push_back({tx, ty, p.l, p.r + 1});
          vis[tx][ty] = 1;
          ans++;
        }
      } else if (i == 3 && p.l < l) {
        tx = p.x + Next[i][0];
        ty = p.y + Next[i][1];
        if (tx > 0 && tx <= n && ty > 0 && ty <= m && !vis[tx][ty] &&
            mp[tx][ty] == '.') {
          q.push_back({tx, ty, p.l + 1, p.r});
          vis[tx][ty] = 1;
          ans++;
        }
      }
    }
  }
  return ans;
}
int main() {
  scanf("%d%d%d%d%d%d", &n, &m, &sx, &sy, &l, &r);
  for (int i = 1; i <= n; i++) {
    scanf("%s", mp[i] + 1);
  }
  printf("%d\n", bfs(sx, sy));
  return 0;
}
