#include<stdio.h>
#include<iostream>
#include<string>
#include<string.h>
#include<math.h>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
const int maxn = 35;
const int inf = 1<<30;
int n,m,ans;
char map[maxn][maxn];
int xs[] = {0,1,0,-1,1,1,-1,-1};
int ys[] = {1,0,-1,0,1,-1,1,-1};
void DFS( int x,int y )
{
int xx,yy;
for( int i = 0; i < 4; i ++ )
{
xx = x + xs[i];
yy = y + ys[i];
if( map[xx][yy] == '.' ){
//map[xx][yy] = '*';
ans ++;
}
else if( map[xx][yy] == 'X' ){
map[xx][yy] = '*';
DFS(xx,yy);
}
}
for( int i = 4; i < 8; i ++ ){
xx = x + xs[i];
yy = y + ys[i];
if( map[xx][yy] == 'X' ){
map[xx][yy] = '*';
DFS(xx,yy);
}
}
}
int main()
{
//freopen("data.txt","r",stdin);
int sx,sy;
while( scanf("%d%d%d%d",&n,&m,&sx,&sy) == 4 ,(n||m||sx||sy)){
ans = 0;
memset(map,'.',sizeof(map));
for( int i = 1; i <= n; i ++ ){
getchar();
for( int j = 1; j <= m; j ++ )
scanf("%c",&map[i][j]);
}
map[sx][sy] = '*';
DFS(sx,sy);
printf("%d\n",ans);
}
return 0;
}