#include <bits/stdc++.h>
#define FI first
#define SE second
#define EPS 1e-9
#define ALL(a) a.begin(),a.end()
#define SZ(a) int((a).size())
#define MS(s, n) memset(s, n, sizeof(s))
#define FOR(i,a,b) for (int i = (a); i <= (b); i++)
#define FORE(i,a,b) for (int i = (a); i >= (b); i--)
#define FORALL(it, a) for (__typeof((a).begin()) it = (a).begin(); it != (a).end(); it++)
#define WHATIS(x) cout << #x << " is " << x << endl;
#define ERROR(args...) { string _s = #args; replace(_s.begin(), _s.end(), ',', ' '); stringstream _ss(_s); istream_iterator<string> _it(_ss); err(_it, args); }
//__builtin_ffs(x) return 1 + index of least significant 1-bit of x
//__builtin_clz(x) return number of leading zeros of x
//__builtin_ctz(x) return number of trailing zeros of x

using namespace std;
using ll = long long;
using ld = double;
typedef pair<int, int> II;
typedef pair<II, int> III;
typedef complex<ld> cd;
typedef vector<cd> vcd;

void err(istream_iterator<string> it) {}
template<typename T, typename... Args>
void err(istream_iterator<string> it, T a, Args... args) {
    cout << *it << " = " << a << endl;
    err(++it, args...);
}

const ll MODBASE = 1000000007LL;
const int MAXN = 100010;
const int MAXM = 200010;
const int MAXK = 110;
const int MAXQ = 200010;

int k, x, y;
vector<II> kq;

int findRes() {
    int g = abs(x) + abs(y);
    if (g == k) return 1;
    if (k % 2 == 0) {
        if (g % 2) return -1;
        if (g < k) return 2;
        return g / k + (g % k > 0);
    }
    else {
        if (g < k) {
            if (g % 2) return 3;
            return 2;
        }
        int p = g / k + (g % k > 0);
        if (g % 2) {
            if (p % 2 == 0) return p + 1;
            return p;
        }
        else {
            if (p % 2) return p + 1;
            return p;
        }
    }
}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(nullptr);
    cin >> k >> x >> y;
    int res = findRes();
    cout << res << "\n";
    if (res == -1) return 0;
    if (res == 1) {
        cout << x << ' ' << y;
        return 0;
    }
    II now = II(x, y);
    FORE(i,res,2) {
        kq.emplace_back(now);
        int g = now.FI, h = now.SE;
        if (i == 2) {
            int diff = abs(g) + abs(h) - k;
            int l = k / 2 - abs(diff) / 2;
            int r = l + abs(diff);
            bool co = false;
            int L = l, R = r;
            FOR(p,0,1) {
                FOR(I,0,1) {
                    FOR(J,0,1) {
                        L = l; R = r;
                        if (I) L = -L;
                        if (J) R = -R;
                        int u = L + g;
                        int v = R + h;
                        if (abs(u) + abs(v) == k) {
                            co = true;
                            break;
                        }
                    }
                    if (co) break;
                }
                if (co) break;
                swap(l, r);
            }
            now = II(-L, -R);
        }
        else {
            if (abs(g) + abs(h) >= k) {
                if (abs(g) >= k) {
                    if (g > 0) g -= k;
                    else g += k;
                }
                else if (abs(h) >= k) {
                    if (h > 0) h -= k;
                    else h += k;
                }
                else {
                    int p = k - abs(g);
                    g = 0;
                    if (h > 0) h -= p;
                    else h += p;
                }
            }
            else {
                int l = k / 2;
                int r = k / 2 + (k % 2);
                if (g > 0) g += l;
                else g -= l;
                if (h > 0) h += r;
                else h -= r;
            }
            now = II(g, h);
        }
    }
    kq.emplace_back(now);
    FORE(i,SZ(kq)-1,0) cout << kq[i].FI << ' ' << kq[i].SE << "\n";
    return 0;
}


Measured memory_bytes: 3952