#include<iostream>
#include<algorithm>
using namespace std;
const int N = 260;
const int M = 35000;
int n,m;
int g[N][N];
bool v[N][N];
int dx[] = {1,-1,0,0};
int dy[] = {0,0,1,-1};
int ans[M];
int max_ans[M];
int num;
void dfs(int x,int y,int &k)
{
k++;
v[x][y] = true;
for(int i = 0;i<4;i++)
{
int a = x + dx[i];
int b = y + dy[i];
if(a>=1&&a<=n&&b>=1&&b<=m&&g[a][b]==1&&!v[a][b])
{
dfs(a,b,k);
}
}
}
int main()
{
cin>>n>>m;
for(int i = 1;i<=n;i++)
{
for(int j = 1;j<=m;j++)
{
cin>>g[i][j];
}
}
int a,b;
cin>>a>>b;
for(int i = 1;i<=n;i++)
{
for(int j = 1;j<=m;j++)
{
if(g[i][j] == 1 && !v[i][j])
{
int k = 0;
dfs(i,j,k);
num++;
ans[num] = k;
}
}
}
cout<<num<<endl;
sort(ans,ans+2500);
for(int i = 0;i<=2500;i++)
{
if(ans[i]>0)
{
max_ans[ans[i]]++;
}
}
for(int i = 0;i<=2500;i++)
{
if(max_ans[i]>0)
{
cout<<i<<" "<<max_ans[i]<<endl;
}
}
return 0;
}