#include <iostream>
#include <algorithm>
#include <iomanip>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <vector>
#include <string>
#include <queue>
#include <deque>
#include <list>
#include <set>
#include <map>
#include <bitset>

using namespace std;
typedef long long ll;

vector<pair<int, int>> v;

int main() {
	int K, X, Y; cin >> K >> X >> Y;

	int M = abs(X) + abs(Y);

	if (K % 2 == 0 && M % 2 == 1) {
		cout << -1 << endl;
		return 0;
	}

	int x = 0, y = 0;
	if (M % 2 == 1) {
		int R = K;
		int C = 0;
		if (x < X) {
			C = min(R, X - x);
			x += C;
			R -= C;
		}
		if (x > X) {
			C = min(R, x - X);
			x -= C;
			R -= C;
		}
		if (y < Y) {
			C = min(R, Y - y);
			y += C;
			R -= C;
		}
		if (y > Y) {
			C = min(R, y - Y);
			y -= C;
			R -= C;
		}
		if (R > 0) { x += (X >= 0) ? R : -R; }
		v.push_back({ x,y });
	}

	if (x != X || y != Y) {
		M = abs(X - x) + abs(Y - y);
		int N = M / K;

		if (M == N * K) {
			while (x != X || y != Y) {
				int R = K;
				int C = 0;
				if (x < X) {
					C = min(R, X - x);
					x += C;
					R -= C;
				}
				if (x > X) {
					C = min(R, x - X);
					x -= C;
					R -= C;
				}
				if (y < Y) {
					C = min(R, Y - y);
					y += C;
					R -= C;
				}
				if (y > Y) {
					C = min(R, y - Y);
					y -= C;
					R -= C;
				}
				v.push_back({ x,y });
			}
		}
		else if(N <= 1) {
			int x0 = x, y0 = y;
			if (x0 < X) {
				while ((abs(x - x0) + abs(y - y0) != abs(X - x) + abs(Y - y))) {
					x++;
					if (x == X + 1) {
						x--;
						break;
					}
				}
			}
			else {
				while ((abs(x - x0) + abs(y - y0) != abs(X - x) + abs(Y - y))) {
					x--;
					if (x == X - 1) {
						x++;
						break;
					}
				}
			}
			if (y0 < Y) {
				while ((abs(x - x0) + abs(y - y0) != abs(X - x) + abs(Y - y))) {
					y++;
					if (y == Y + 1) {
						y--;
						break;
					}
				}
			}
			else {
				while ((abs(x - x0) + abs(y - y0) != abs(X - x) + abs(Y - y))) {
					y--;
					if (y == Y - 1) {
						y++;
						break;
					}
				}
			}

			int k = K - (abs(X - x) + abs(Y - y));
			if (x <= X && x <= x0) {
				x -= k;
			}
			else if (x >= X && x >= x0) {
				x += k;
			}
			else if (y <= Y && y <= y0) {
				y -= k;
			}
			else{
				y += k;
			}

			v.push_back({ x,y });
			v.push_back({ X,Y });
		}
		else {
			int n = (abs(X - x) + abs(Y - y)) / K;
			int nx = abs(X - x) / K;
			int ny = abs(Y - y) / K;

			if (K % 2 == 0) {
				if (n == nx + ny) {
					if (nx > 0) { nx--; }
					else { ny--; }
				}
			}
			else {
				if (n == nx + ny && (abs(X - x) + abs(Y - y) + nx + ny) % 2 == 1) {
					if (nx > 0) { nx--; }
					else { ny--; }
				}
				else if (n > nx + ny) {
					if ((abs(X - x) + abs(Y - y) + nx + ny) % 2 == 1) {
						if (abs(X - x) % K > abs(Y - y) % K) {
							if (X < x) { x -= K; }
							else { x += K; }
						}
						else {
							if (Y < y) { y -= K; }
							else { y += K; }
						}
						v.push_back({ x,y });
					}
				}
			}

			
			for (int i = 0; i < nx; i++) {
				if (X > x) {
					x += K;
				}
				else {
					x -= K;
				}
				v.push_back({ x,y });
			}
			for (int i = 0; i < ny; i++) {
				if (Y > y) {
					y += K;
				}
				else {
					y -= K;
				}
				v.push_back({ x,y });
			}
			
			int x0 = x, y0 = y;
			if (x0 < X) {
				while ((abs(x - x0) + abs(y - y0) != abs(X - x) + abs(Y - y))) {
					x++;
					if (x == X + 1) {
						x--;
						break;
					}
				}
			}
			else {
				while ((abs(x - x0) + abs(y - y0) != abs(X - x) + abs(Y - y))) {
					x--;
					if (x == X - 1) {
						x++;
						break;
					}
				}
			}
			if (y0 < Y) {
				while ((abs(x - x0) + abs(y - y0) != abs(X - x) + abs(Y - y))) {
					y++;
					if (y == Y + 1) {
						y--;
						break;
					}
				}
			}
			else {
				while ((abs(x - x0) + abs(y - y0) != abs(X - x) + abs(Y - y))) {
					y--;
					if (y == Y - 1) {
						y++;
						break;
					}
				}
			}

			int k = K - (abs(X - x) + abs(Y - y));
			if (x <= X && x <= x0) {
				x -= k;
			}
			else if (x >= X && x >= x0) {
				x += k;
			}
			else if (y <= Y && y <= y0) {
				y -= k;
			}
			else {
				y += k;
			}

			v.push_back({ x,y });
			v.push_back({ X,Y });
		}
	}

	cout << v.size() << endl;
	for (auto itr = v.begin(); itr != v.end(); itr++) {
		cout << itr->first << " " << itr->second << endl;
	}

	return 0;
}

Measured memory_bytes: 3952