#include<bits/stdc++.h>
using namespace std;
int k,x,y;
queue<pair<int,int> >q;
bool solve(int xx,int yy)
{
    int dis=abs(xx-x)+abs(yy-y);
    if(dis%k!=0)
    {
        int t=dis%k;
        dis-=t;
        if(k&1)
        {
            if((k-t)&1)
            {
                int p=k-t,a=(p+k)/2,b=k-a;
                if(abs(xx-x)>=b)
                {
                    xx<x?(xx+=b):(xx-=b);
                    yy<y?(yy-=a):(yy+=a);
                    q.push({xx,yy});
                }
                else if(abs(yy-y)>=b)
                {
                    yy<y?(yy+=b):(yy-=b);
                    xx<x?(xx-=a):(xx+=a);
                    q.push({xx,yy});
                }
                else return false;
                t=k;
            }
            else
            {
                int p=k-1-t,a=(p+k)/2,b=k-a;
                if(abs(xx-x)>=b)
                {
                    xx<x?(xx+=b):(xx-=b);
                    yy<y?(yy-=a):(yy+=a);
                    q.push({xx,yy});
                }
                else if(abs(yy-y)>=b)
                {
                    yy<y?(yy+=b):(yy-=b);
                    xx<x?(xx-=a):(xx+=a);
                    q.push({xx,yy});
                }
                else return false;
                p=1,a=(p+k)/2,b=k-a;
                if(abs(xx-x)>=b)
                {
                    xx<x?(xx+=b):(xx-=b);
                    yy<y?(yy-=a):(yy+=a);
                    q.push({xx,yy});
                }
                else if(abs(yy-y)>=b)
                {
                    yy<y?(yy+=b):(yy-=b);
                    xx<x?(xx-=a):(xx+=a);
                    q.push({xx,yy});
                }
                else return false;
                t=k;
            }
        }
        else
        {
            int p=k-t,a=(p+k)/2,b=k-a;
            if(abs(xx-x)>=b)
            {
                xx<x?(xx+=b):(xx-=b);
                yy<y?(yy-=a):(yy+=a);
                q.push({xx,yy});
            }
            else if(abs(yy-y)>=b)
            {
                yy<y?(yy+=b):(yy-=b);
                xx<x?(xx-=a):(xx+=a);
                q.push({xx,yy});
            }
            else return false;
            t=k;
        }
        dis+=t;
    }
    while(abs(xx-x)>=k)
        xx<x?(xx+=k):(xx-=k),q.push({xx,yy}),dis-=k;
    while(abs(yy-y)>=k)
        yy<y?(yy+=k):(yy-=k),q.push({xx,yy}),dis-=k;
    if(dis) q.push({x,y});
    return true;
}
bool solve1(int xx,int yy)
{
    int dis=abs(xx-x)+abs(yy-y);
    if(dis%k!=0)
    {
        int t=dis%k;
        dis-=t;
        if(k&1)
        {
            if(t&1)
            {
                int p=t,a=(p+k)/2,b=k-a;
                if(abs(xx-x)>=a)
                {
                    xx<x?(xx+=a):(xx-=a);
                    yy<y?(yy-=b):(yy+=b);
                    q.push({xx,yy});
                }
                else if(abs(yy-y)>=a)
                {
                    yy<y?(yy+=a):(yy-=a);
                    xx<x?(xx-=b):(xx+=b);
                    q.push({xx,yy});
                }
                else return false;
                t=0;
            }
            else
            {
                int p=t-1,a=(p+k)/2,b=k-a;
                if(abs(xx-x)>=a)
                {
                    xx<x?(xx+=a):(xx-=a);
                    yy<y?(yy-=b):(yy+=b);
                    q.push({xx,yy});
                }
                else if(abs(yy-y)>=a)
                {
                    yy<y?(yy+=a):(yy-=a);
                    xx<x?(xx-=b):(xx+=b);
                    q.push({xx,yy});
                }
                else return false;
                p=1,a=(p+k)/2,b=k-a;
                if(abs(xx-x)>=a)
                {
                    xx<x?(xx+=a):(xx-=a);
                    yy<y?(yy-=b):(yy+=b);
                    q.push({xx,yy});
                }
                else if(abs(yy-y)>=a)
                {
                    yy<y?(yy+=a):(yy-=a);
                    xx<x?(xx-=b):(xx+=b);
                    q.push({xx,yy});
                }
                else return false;
                t=0;
            }
        }
        else
        {
            int p=t,a=(p+k)/2,b=k-a;
            if(abs(xx-x)>=a)
            {
                xx<x?(xx+=a):(xx-=a);
                yy<y?(yy-=b):(yy+=b);
                q.push({xx,yy});
            }
            else if(abs(yy-y)>=a)
            {
                yy<y?(yy+=a):(yy-=a);
                xx<x?(xx-=b):(xx+=b);
                q.push({xx,yy});
            }
            else return false;
            t=0;
        }
        dis+=t;
    }
    while(abs(xx-x)>=k)
        xx<x?(xx+=k):(xx-=k),q.push({xx,yy}),dis-=k;
    while(abs(yy-y)>=k)
        yy<y?(yy+=k):(yy-=k),q.push({xx,yy}),dis-=k;
    if(dis) q.push({x,y});
    return true;
}
int main()
{
    scanf("%d%d%d",&k,&x,&y);
    if(k%2==0&&(abs(x)+abs(y))%2==1) {printf("-1\n");return 0;}
    int dis=abs(x)+abs(y);
    if(dis==k) printf("1\n%d %d\n",x,y);
    else if(dis==0) printf("0\n");
    else
    {
        if(!solve1(0,0))
        {
            while(!q.empty()) q.pop();
            if(!solve(0,0))
            {
                while(!q.empty()) q.pop();
                int nowx=0,nowy=0;
                if(nowx<x) nowx-=k/2;
                else nowx+=k/2;
                if(nowy<y) nowy-=k-k/2;
                else nowy+=k-k/2;
                q.push({nowx,nowy});
                if(!solve1(nowx,nowy))
                {

                    while(!q.empty()) q.pop();
                    q.push({nowx,nowy});
                    solve(nowx,nowy);
                }
            }
        }
        printf("%d\n",q.size());
        while(!q.empty())
        {
            printf("%d %d\n",q.front().first,q.front().second);q.pop();
        }
    }
}


Measured memory_bytes: 3968