#include <iostream>
#include <queue>
using namespace std;
char _map[2005][2005];
bool vis[2005][2005];
int ans = 1;
int n, m, r, c, x, y;
struct point {
int x, y, maxX, maxY;
};
void bfs()
{
queue<point> q;
q.push({r, c, x, y});
vis[r][c] = 1;
while (q.size())
{
point data = q.front();
q.pop();
int nex[2][2] = {{1,0},{-1,0}};
for (int i = 0; i < 2; i++)
{
int dx = nex[i][0] + data.x;
int dy = nex[i][1] + data.y;
if (dx <= 0 || dx > n || dy <= 0 || dy > m || vis[dx][dy])
{
continue;
}
vis[dx][dy] = 1;
ans++;
q.push({dx, dy, data.maxX, data.maxY});
}
if (data.maxX > 0)
{
int dx = data.x;
int dy = data.y - 1;
if (dy <= 0 || dy > m || vis[dx][dy])
{
goto _;
}
vis[dx][dy] = 1;
ans++;
q.push({dx, dy, data.maxX - 1, data.maxY});
}
_:
if (data.maxY > 0)
{
int dx = data.x;
int dy = data.y + 1;
if (dy <= 0 || dy > m || vis[dx][dy])
{
continue;
}
vis[dx][dy] = 1;
ans++;
q.push({dx, dy, data.maxX, data.maxY - 1});
}
}
}
void solve()
{
cin >> n >> m >> r >> c >> x >> y;
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= m; j++)
{
cin >> _map[i][j];
vis[i][j] = (_map[i][j] == '*');
}
}
bfs();
cout << ans;
}
int main()
{
solve();
}