#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;

int main() {

    long long int k, x, y;
    cin >> k >> x >> y;

    bool fx = false;
    if ( x < 0 ) {
        fx = true;
        x = -x;
    }
    bool fy = false;
    if ( y < 0 ) {
        fy = true;
        y = -y;
    }
    bool xy = false;
    if ( x < y ) {
        xy = true;
        swap( x, y );
    }

    vector< pair< long long int, long long int > > ans;
    long long int px = 0;
    long long int py = 0;

    if ( ( k % 2 ) == 0 ) {
        if ( ( x + y ) % 2 != 0 ) {
            cout << "-1" << endl;
            return 0;
        }
        if ( x + y < k ) {
            long long int p = x + y;
            px = p / 2 - ( p - x );
            py = k - px;
            ans.push_back( make_pair( px, py ) );
            ans.push_back( make_pair( x, y ) );
        } else if ( x + y == k ) {
            ans.push_back( make_pair( x, y ) );
        } else {
            long long int cnt = ( k - ( x + y ) % k ) % k;
            py = -cnt / 2;
            px = k + py;
            ans.push_back( make_pair( px, py ) );
            while( px < x ) {
                if ( px + k < x ) {
                    px += k;
                    ans.push_back( make_pair( px, py ) );
                    continue;
                }
                py += k - ( x - px );
                px = x;
                ans.push_back( make_pair( px, py ) );
                break;
            }
            while( py < y ) {
                py += k;
                ans.push_back( make_pair( px, py ) );
            }
        }
    } else {
        if ( x + y < k ) {
            long long int p = x + y;
            if ( p % 2 == 0 ) {
                px = p / 2 - ( p - x );
                py = k - px;
                ans.push_back( make_pair( px, py ) );
                ans.push_back( make_pair( x, y ) );
            } else {
                px -= k;
                ans.push_back( make_pair( px, py ) );
                long long int cnt = ( k - ( x + y ) % k ) % k;
                if ( cnt % 2 != 0 ) cnt += k;
                py = -cnt / 2;
                px += k + py;
                ans.push_back( make_pair( px, py ) );
                ans.push_back( make_pair( x, y ) );
            }
        } else if ( x + y == k ) {
            ans.push_back( make_pair( x, y ) );
        } else {
            long long int cnt = ( k - ( x + y ) % k ) % k;
            if ( cnt % 2 != 0 ) cnt += k;
            py = -cnt / 2;
            px = k + py;
            ans.push_back( make_pair( px, py ) );
            while( px < x ) {
                if ( px + k < x ) {
                    px += k;
                    ans.push_back( make_pair( px, py ) );
                    continue;
                }
                py += k - ( x - px );
                px = x;
                ans.push_back( make_pair( px, py ) );
                break;
            }
            while( py < y ) {
                py += k;
                ans.push_back( make_pair( px, py ) );
            }
        }
    }

    cout << ans.size() << endl;
    for ( long long int i = 0; i < ans.size(); i++ ) {
        if ( xy ) swap( ans[i].first, ans[i].second );
        if ( fx ) ans[i].first = -ans[i].first;
        if ( fy ) ans[i].second = -ans[i].second;
        cout << ans[i].first << " " << ans[i].second << endl;
    }

    return 0;

}


Measured memory_bytes: 6256