/*
1700 문제 시작합니다.
30분컷 목표로 합니다.
로봇 청소기가 청소한 칸의 개수를 출력합니다.
22분컷!
*/
#include <iostream>
using namespace std;
#define SIZE 55 // 55
int map[SIZE][SIZE];
int N, M;
int startX, startY, startDir;
int dx[] = { -1,0,1,0 }; // 북 동 남 서
int dy[] = { 0,1,0,-1 };
int x, y, nx, ny, dir;
int clean_cnt, turn_cnt;
int index;
void problemIn() {
cin >> N >> M;
cin >> startX >> startY >> startDir;
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
cin >> map[i][j];
}
}
}
void solve() {
x = startX;
y = startY;
dir = startDir;
clean_cnt = 1;
// index = 2; // 확인용
while (1) {
map[x][y] = 2; // 현재 자리를 청소합니다.
dir = (dir - 1 + 4) % 4;
turn_cnt++;
nx = x + dx[dir];
ny = y + dy[dir];
if (nx >= 0 && ny >= 0 && nx < N && ny < M) { // 맵 안에 들면서,
if (map[nx][ny] == 0) { // 청소할 공간이 있다면,
clean_cnt++;
x = nx;
y = ny;
turn_cnt = 0;
continue;
}
else if (map[nx][ny] != 0) { // 청소할 공간이 없다면,
// 4바퀴를 돌았다면, 후진
if (turn_cnt >= 4) {
if (dir == 0) {
nx = x + dx[2];
ny = y + dy[2];
}
else if (dir == 1) {
nx = x + dx[3];
ny = y + dy[3];
}
else if (dir == 2) {
nx = x + dx[0];
ny = y + dy[0];
}
else {
nx = x + dx[1];
ny = y + dy[1];
}
// 후진을 할 곳이 벽이거나, 맵 바깥이면, 중단
if (nx < 0 || ny < 0 || nx >= N || ny >= M || map[nx][ny] == 1) {
break;
}
else { // 후진 할 수 있으면, 합니다.
x = nx;
y = ny;
turn_cnt = 0; // turn 횟수도 리셋해줍니다.
}
}
}
}
}
}
int main() {
problemIn();
solve();
cout << clean_cnt << endl;
return 0;
}