// Grid Acid
#include <iostream>
#include <conio.h>
using namespace std;
#define FOR(i, a, b) for(int i = a; i <= b; i++)
#define maxN 3001
int N, M;
int rs, cs, rStart, cStart;
int a[maxN][maxN];
bool visit[maxN][maxN];
int qr[maxN*maxN], qc[maxN*maxN];
int front, rear;
int ans1, ans2;
int dirr[] = {-1, 0, 1, 0};
int dirc[] = {0, 1, 0, -1};
void BFS(int rStart, int cStart)
{
int k, count = 0;
front = rear = 0;
qr[rear] = rStart; qc[rear] = cStart; rear++;
while(front != rear)
{
int r, c, nr, nc;
r= qr[front]; c = qc[front]; front++;
for(int k = 0; k < 4; k++)
{
nr = r + dirr[k];
nc = c + dirc[k];
if(nr > 0 && nr <= N && nc > 0 && nc <= M)
{
if(a[nr][nc] == -2)
{
a[nr][nc] = a[r][c] + 1;
qr[rear] = nr; qc[rear] = nc; rear++;
}
if(a[nr][nc] == -1)
{
count++;
if(count == 4)
a[nr][nc] = a[r][c];
}
}
}
}
}
int findMax()
{
int i,j;
int temp = 0;
FOR(i, 1, N)
FOR(j, 1, M)
{
if(a[i][j] == -2)
return -1;
if(a[i][j] >= temp)
temp = a[i][j];
}
return temp;
}
int main()
{
freopen("input.txt", "r", stdin);
int T;
cin >> T;
FOR(tc, 1, T)
{
cin >> N >> M;
cin >> rStart >> cStart;
FOR(i, 1, N)
{
FOR(j, 1, M)
{
cin >> a[i][j];
if(a[i][j] == 1)
a[i][j] = -2;
if(a[i][j] == 2)
{
rs = i; cs = j;
a[i][j] = -1;
}
}
}
a[rStart][cStart] = 1;
BFS(rStart,cStart);
ans1 = a[rs][cs];
if(ans1 == -1)
ans2 = -1;
else ans2 = findMax();
cout << "Case #" << tc << endl;
cout << ans1 << " " << ans2 << endl;
}
getch();
return 0;
}