#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<functional>
#include<vector>
#include<queue>
#include<stack>
#include<set>
#include<map>
using namespace std;
#define MOD 1000000007
#define f(i,n) for(int i=0;i<int(n);i++)
#define N 300000






int main() {
	int x[N];
	int y[N];
	int n, k;
	int xx, yy, z,zz;
	int s,t, ans;
	bool v = true;
	ans = 0;
	scanf("%d", &k);
	scanf("%d %d", &xx, &yy);
	z = abs(xx) + abs(yy);
	//p1
	if (((z % 2) == 1) && ((k % 2) == 0)) {
		printf("-1\n");
		return 0;
	}
	//p2
	if (z%k == 0) {
		s = z / k;
		x[s - 1] = xx;
		y[s - 1] = yy;
		for (int i = s - 2; i >= 0; i--) {
			z = k;
			while (z > 0) {
				if (xx > 0)xx--;
				else if (xx < 0)xx++;
				else if (yy > 0)yy--;
				else yy++;
				z--;
			}
			x[i] = xx;
			y[i] = yy;
		}
		printf("%d\n", s);
		f(i, s) {
			printf("%d %d\n", x[i], y[i]);
		}
		return 0;
	}
	//p3
	if (z % 2 == 0) {
		s = (z + k - 1) / k;
		if(s==1)s=2;
		if (k % 2 == 1) {
			s = (s + 1) / 2;
			s = s * 2;
		}
		x[s - 1] = xx;
		y[s - 1] = yy;
		for (int i = s - 2; i >= 1; i--) {
			z = k;
			while (z > 0) {
				if (xx > 0)xx--;
				else if (xx < 0)xx++;
				else if (yy > 0)yy--;
				else yy++;
				z--;
			}
			x[i] = xx;
			y[i] = yy;
		}
		z = (abs(xx) + abs(yy)) / 2;
      zz=k-z;
		while (z > 0) {
			if (xx > 0)xx--;
			else if (xx < 0)xx++;
			else if (yy > 0)yy--;
			else yy++;
			z--;
		}
		if (xx!=0 && yy >= 0) {
			x[0] = xx;
			y[0] = yy + zz;
		}
		else if (xx != 0) {
			x[0] = xx;
			y[0] = yy - zz;
		}
		else if (x[1]>=0) {
			x[0] = xx - zz;
			y[0] = yy;
		}
		else {
			x[0] = xx + zz;
			y[0] = yy;
		}
		printf("%d\n", s);
		f(i, s) {
			printf("%d %d\n", x[i], y[i]);
		}
		return 0;
	}
	if (z < k) {
		x[2] = xx;
		y[2] = yy;
		z = k;
		z -= abs(xx);
		xx = 0;
		if (yy >= 0)yy -= z;
		else yy += z;
		x[1] = xx;
		y[1] = yy;
		z = (abs(xx) + abs(yy)) / 2;
      zz=k-z;
		while (z > 0) {
			if (xx > 0)xx--;
			else if (xx < 0)xx++;
			else if (yy > 0)yy--;
			else yy++;
			z--;
		}
		if (xx != 0 && yy >= 0) {
			x[0] = xx;
			y[0] = yy + zz;
		}
		else if (xx != 0) {
			x[0] = xx;
			y[0] = yy - zz;
		}
		else if (x[1] >= 0) {
			x[0] = xx - zz;
			y[0] = yy;
		}
		else {
			x[0] = xx + zz;
			y[0] = yy;
		}
		printf("%d\n", 3);
		f(i, 3) {
			printf("%d %d\n", x[i], y[i]);
		}
		return 0;
}
	else {
		s = (z + k - 1) / k;
		t = s;
		if (k % 2 == 1) {
			s = s / 2;
			s = s * 2;
			s++;
		}
		x[s - 1] = xx;
		y[s - 1] = yy;
		for (int i = s - 2; i >= 1; i--) {
			z = k;
			while (z > 0) {
				if (xx > 0)xx--;
				else if (xx < 0)xx++;
				else if (yy > 0)yy--;
				else yy++;
				z--;
			}
			x[i] = xx;
			y[i] = yy;
		}
		z = (abs(xx) + abs(yy)) / 2;
      zz=k-z;
		while (z > 0) {
			if (xx > 0)xx--;
			else if (xx < 0)xx++;
			else if (yy > 0)yy--;
			else yy++;
			z--;
		}
		if (xx != 0 && yy >= 0) {
			x[0] = xx;
			y[0] = yy + zz;
		}
		else if (xx != 0) {
			x[0] = xx;
			y[0] = yy - zz;
		}
		else if (x[1] >= 0) {
			x[0] = xx - zz;
			y[0] = yy;
		}
		else {
			x[0] = xx + zz;
			y[0] = yy;
		}
		printf("%d\n", s);
		f(i, s) {
			printf("%d %d\n", x[i], y[i]);
		}
		return 0;
	}

	return 0;
}

Measured memory_bytes: 3712