#include <bits/stdc++.h>
using namespace std;
string s[3000];
queue<pair<int, int> > q1, q2, q3;
pair<int, int> lr[2100][2100];
bool used[2100][2100];
void add(int x, int y, int l, int r, bool fr) {
  if (fr)
    q1.push({x, y});
  else
    q2.push({x, y});
  lr[x][y] = {l, r};
  used[x][y] = true;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  int i, n, m, x, y, l, r, ans = 0;
  cin >> n >> m >> x >> y >> l >> r;
  x--;
  y--;
  for (i = 0; i < n; i++) cin >> s[i];
  q1.push({x, y});
  lr[x][y] = {l, r};
  used[x][y] = true;
  while (!q1.empty()) {
    while (!q1.empty()) {
      x = q1.front().first;
      y = q1.front().second;
      q2.push(q1.front());
      q1.pop();
      for (i = 1; x - i >= 0 && !used[x - i][y] && s[x - i][y] == '.'; i++)
        add(x - i, y, lr[x][y].first, lr[x][y].second, false);
      for (i = 1; x + i < n && !used[x + i][y] && s[x + i][y] == '.'; i++)
        add(x + i, y, lr[x][y].first, lr[x][y].second, false);
    }
    while (!q2.empty()) {
      ans++;
      x = q2.front().first;
      y = q2.front().second;
      q2.pop();
      if (y > 0 && lr[x][y].first > 0 && s[x][y - 1] == '.' && !used[x][y - 1])
        add(x, y - 1, lr[x][y].first - 1, lr[x][y].second, true);
      if (y < m - 1 && lr[x][y].second > 0 && s[x][y + 1] == '.' &&
          !used[x][y + 1])
        add(x, y + 1, lr[x][y].first, lr[x][y].second - 1, true);
    }
  }
  cout << ans;
  return 0;
}
