#include<bits/stdc++.h>
#include<string.h>
 
typedef long long int ll;
#define all(x) (x).begin(), (x).end()
 
using namespace std;

int nxt() {
    int x;
    cin >> x;
    return x;
}

ll nxtl(){
    ll x;
    cin>>x;
    return x;
}
 
void SieveOfEratosthenes(int n,vector <int> &primes) 
{ 
    // Create a boolean array "prime[0..n]" and initialize 
    // all entries it as true. A value in prime[i] will 
    // finally be false if i is Not a prime, else true. 
    bool prime[n+1]; 
    memset(prime, true, sizeof(prime)); 
  
    for (int p=2; p*p<=n; p++) 
    { 
        // If prime[p] is not changed, then it is a prime 
        if (prime[p] == true) 
        { 
            // Update all multiples of p greater than or  
            // equal to the square of it 
            // numbers which are multiple of p and are 
            // less than p^2 are already been marked.  
            for (int i=p*p; i<=n; i += p) 
                prime[i] = false; 
        } 
    } 
  
    // Print all prime numbers 
    for (int p=2; p<=n; p++) 
       if (prime[p]) 
          primes.push_back(p);
} 
 
ll max(ll a,ll b)
{
    if(a>b)
        return a;
    return b;
}
 
ll power(ll x, ll y,ll mod) 
{ 
    ll temp; 
    if( y == 0) 
        return 1; 
    temp = power(x, y/2,mod); 
    if (y%2 == 0) 
        return (temp*temp)%mod; 
    else
        return (((x*temp)%mod)*temp)%mod; 
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int k=nxt(),x=nxt(),y=nxt();
    bool xn=0,yn=0;
    if(x<0){
        x=-x;
        xn=1;
    }
    if(y<0){
        y=-y;
        yn=1;
    }
    if(k%2==0&&(x+y)%2)
    {
        cout<<"-1\n";
        return 0;
    }
    int n=(x+y)/k;
    if((x+y)%k!=0)
        n++;
    if(n==1&&k!=(x+y))
        n++;
    if(k%2&&(x+y)%2&&n%2==0)
        n++;
    else if(k%2&&(x+y)%2==0&&n%2)
        n++;
    cout<<n<<endl;

    ll a=(n*k+x+y)/2;
    ll b=(n*k-x-y)/2;
    vector <pair<int,int> > test;
    int X=x;
    int Y=y;
    x=0;y=0;

    //cout<<a<<" "<<b<<endl;
    while(b>=k)
    {
        if(X-x<=Y-y)
        {
                x-=k;
                b-=k;
                test.push_back({x,y});
           
        }
        else
        {
              y-=k;
                b-=k;
                test.push_back({x,y});
        }
    }

    if(b>0)
    {
        if(X-x<=Y-y)
        {
                x-=b;
                y+=(k-b);
                b=0;
                test.push_back({x,y});
           
        }
        else
        {
              y-=b;
                x+=(k-b);
                b=0;
                test.push_back({x,y});
        }
    }
    

    while(X-x>=k)
    {
        x+=k;
        a-=k;
        test.push_back({x,y});
    }
    if(X-x>0)
    {
        y+=(k-(X-x));
        a-=(k-(X-x));
        x=X;
        test.push_back({x,y});
    }

    while(Y-y>=k)
    {
        y+=k;
        a-=k;
        test.push_back({x,y});
    }

    for(int i=0;i<test.size();i++){
        if(xn)
            test[i].first=-test[i].first;
        if(yn)
            test[i].second=-test[i].second;
        cout<<test[i].first<<" "<<test[i].second<<endl;
    }
    
    
    return 0;   
}


 
 


Measured memory_bytes: 3952