#pragma GCC optimize (2)
#pragma G++ optimize (2)
#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
#define MAX 605
using namespace std;
//char nc()
//{
//	static char buf[100000],*p1=buf,*p2=buf;
//	return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;
//}
char nc(){return getchar();}
int read()
{
	int x=0,y=1;
	char c=nc();
	while(!isdigit(c))
	{
		if(c=='-')y=-1;
		c=nc();
	}
	while(isdigit(c))
	{
		x=(x<<1)+(x<<3)+(c^48);
		c=nc();
	}
	return x*y;
}
int n,d1,d2,col[MAX][MAX];
void dye(int d)
{
	int t=0;
	while(!(d%4)) d>>=2,t++;
	for(int i=0;i<n;i++)
		for(int j=0;j<n;j++)
			if(((d&1)&&(((i>>t)+(j>>t))&1))||(!(d&1)&&((i>>t)&1)))
				col[i][j]=1;
}
int main()
{
	n=read();d1=read();d2=read();
	int lim=n*n;n<<=1;
	dye(d1);dye(d2);
	for(int i=0;i<n;i++)
		for(int j=0;j<n;j++)
			if(!col[i][j])
			{
				lim--;
				printf("%d %d\n",i,j);
				if(!lim) return 0;
			}
	return 0;
}
