#include <cstdio>
#include <vector>
#include <set>
#include <utility>
using namespace std;
vector<pair<int,int> > al[609][609];
vector<pair<int,int> > bl[609][609];
int A[609][609];
int B[609][609];
vector<pair<int,int> > V[2][2];
void dfsa(int x, int y, int v){
A[x][y] = v;
for (auto i = al[x][y].begin(); i != al[x][y].end(); i++){
if (A[i->first][i->second]==0) dfsa(i->first,i->second,3-v);
}
}
void dfsb(int x, int y, int v){
B[x][y] = v;
for (auto i = bl[x][y].begin(); i != bl[x][y].end(); i++){
if (B[i->first][i->second]==0) dfsb(i->first,i->second,3-v);
}
}
int main(){
int N;
scanf("%d", &N);
int D1, D2;
scanf("%d %d", &D1, &D2);
for (int i = 0; i < 2*N; i++){
for (int j = 0; j < 2*N; j++){
int k = 0;
while ((i-k)*(i-k)>=D1) k++;
int l = j;
for (;(k-i)*(k-i)<=D1&&k<2*N; k++){
if (k<=i){
while ((k-i)*(k-i)+(j-l)*(j-l)<D1) l++;
}
else {
while ((k-i)*(k-i)+(j-l)*(j-l)>D1) l--;
}
if ((k-i)*(k-i)+(j-l)*(j-l)==D1&&l<2*N){
al[i][j].push_back(make_pair(k,l));
//printf("A:(%d,%d) (%d,%d)\n", i, j, k, l);
}
}
k = 0, l = j;
while ((i-k)*(i-k)>=D2) k++;
for (;(k-i)*(k-i)<=D2&&k<2*N; k++){
if (k<=i){
while ((k-i)*(k-i)+(j-l)*(j-l)<D2) l++;
}
else {
while ((k-i)*(k-i)+(j-l)*(j-l)>D2) l--;
}
if ((k-i)*(k-i)+(j-l)*(j-l)==D2&&l<2*N){
bl[i][j].push_back(make_pair(k,l));
//printf("B:(%d,%d) (%d,%d)\n", i, j, k, l);
}
}
}
}
for (int i = 0; i < 2*N; i++){
for (int j = 0; j < 2*N; j++){
if (A[i][j]==0) dfsa(i,j,1);
if (B[i][j]==0) dfsb(i,j,1);
V[A[i][j]-1][B[i][j]-1].push_back(make_pair(i,j));
}
}
for (int i = 0; i < 2; i++){
for (int j = 0; j < 2; j++){
if (V[i][j].size()>=N*N){
for (int k = 0; k < N*N; k++){
printf("%d %d\n", V[i][j][k].first, V[i][j][k].second);
}
return 0;
}
}
}
}