//2019.7.27 by ljz
//email 573902690@qq.com
//if you find any bug in my code
//please tell me
#include<bits/stdc++.h>
using namespace std;
#define res register int
#define LL long long
#define inf 0x3f3f3f3f
#define INF 0x3f3f3f3f3f3f3f
#define eps 1e-10
#define RG register
#define db double
#define lb long db
#define pc(x) __builtin_popcount(x)
typedef pair<int,int> Pair;
#define mp make_pair
#define fi first
#define se second
#define pi acos(-1.0)
#define pb push_back
#define gc getchar
#define Pi 2.0*acos(-1.0)
//inline char gc() {
//    static char buf[100000],*p1,*p2;
//    return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;
//}
//inline int read() {
//    res s=0,ch=gc();
//    while(ch<'0'||ch>'9')ch=gc();
//    while(ch>='0'&&ch<='9')s=s*10+ch-'0',ch=gc();
//    return s;
//}
inline int read() {
    res s=0,ch=gc(),w=1;
    while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=gc();}
    while(ch>='0'&&ch<='9')s=s*10+ch-'0',ch=gc();
    return s*w;
}
//inline LL Read() {
//    RG LL s=0;
//    res ch=gc();
//    while(ch<'0'||ch>'9')ch=gc();
//    while(ch>='0'&&ch<='9')s=s*10+ch-'0',ch=gc();
//    return s;
//}
//inline LL Read() {
//    RG LL s=0;
//    res ch=gc(),w=1;
//    while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=gc();}
//    while(ch>='0'&&ch<='9')s=s*10+ch-'0',ch=gc();
//    return s*w;
//}
//inline void write(RG __int128 x){
//    if(x>10)write(x/10);
//    putchar(x%10+'0');
//}
inline void swap(res &x,res &y) {
    x^=y^=x^=y;
}
//mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
const int N=1e5+10;
namespace MAIN{
    LL K,X,Y,ansx[N<<2],ansy[N<<2],px,py,t;
    inline void MAIN(){
        K=read(),X=read(),Y=read();
        if(K%2==0&&(X+Y)%2)puts("-1");
        else{
            while (abs(px-X)+abs(py-Y)>K*2){
                if (abs(px-X)>K){
                    if (px>X) px-=K,ansx[++t]=px,ansy[t]=py;
                    else px+=K,ansx[++t]=px,ansy[t]=py;
                }
                else{
                    if (py>Y) py-=K,ansx[++t]=px,ansy[t]=py;
                    else py+=K,ansx[++t]=px,ansy[t]=py;
                }
            }
            if (abs(px-X)+abs(py-Y)!=K){
                if (K%2&&(X+Y+px+py)%2){
                    if (abs(py-Y)<=K){
                        if (px<X) px+=K-abs(py-Y);
                        else px-=K-abs(py-Y);
                        py=Y;
                    }
                    else{
                        if (py<Y) py+=K-abs(px-X);
                        else py-=K-abs(px-X);
                        px=X;
                    }
                    ansx[++t]=px; ansy[t]=py;
                }
                RG LL a=(K*2-abs(px-X)-abs(py-Y))/2;
                if (abs(px-X)<abs(py-Y)){
                    if (px<=X){
                        ansx[++t]=X+a;
                        if (py<Y) ansy[t]=py+K-(X+a-px); else ansy[t]=py-(K-(X+a-px));
                    }
                    else{
                        ansx[++t]=X-a;
                        if (py<Y) ansy[t]=py+K-(px-X+a); else ansy[t]=py-(K-(px-X+a));
                    }
                }
                else{
                    if (py<=Y){
                        ansy[++t]=Y+a;
                        if (px<X) ansx[t]=px+K-(Y+a-py); else ansx[t]=px-(K-(Y+a-py));
                    }
                    else{
                        ansy[++t]=Y-a;
                        if (px<X) ansx[t]=px+K-(py-Y+a); else ansx[t]=px-(K-(py-Y+a));
                    }
                }
            }
            ansx[++t]=X,ansy[t]=Y;
            printf("%lld\n",t);
            for(res i=1;i<=t;i++)printf("%lld %lld\n",ansx[i],ansy[i]);
        }
    }
}
int main(){
//    freopen("compound1.in","r",stdin);
//    freopen("compound.out","w",stdout);
    MAIN::MAIN();
    return 0;
}

Measured memory_bytes: 7808