begin
var n := ReadInteger;
var x := ReadInteger;
var y := ReadInteger;
var m := Abs(x) + Abs(y);
if (n < m) or ((n - m) mod 2 <> 0) then
begin
Writeln(-1);
Exit;
end;
var k := (n - m) div 2;
var cx := 0;
var cy := 0;
Writeln(cx, ' ', cy);
if x <> 0 then
begin
// k шагов в сторону, противоположную y
var dy := 1;
if y > 0 then
dy := -1;
for var i := 1 to k do
begin
cy := cy + dy;
Writeln(cx, ' ', cy);
end;
// Идём горизонтально до x
var dx := 1;
if x < 0 then
dx := -1;
for var i := 1 to Abs(x) do
begin
cx := cx + dx;
Writeln(cx, ' ', cy);
end;
// Идём вертикально до y
if y > cy then
dy := 1
else
dy := -1;
for var i := 1 to Abs(y - cy) do
begin
cy := cy + dy;
Writeln(cx, ' ', cy);
end;
end
else
begin
// x = 0, значит y <> 0.
// Сначала делаем горизонтальный обход длины k.
for var i := 1 to k do
begin
cx := cx + 1;
Writeln(cx, ' ', cy);
end;
// Идём вертикально до y
var dy := 1;
if y < 0 then
dy := -1;
for var i := 1 to Abs(y) do
begin
cy := cy + dy;
Writeln(cx, ' ', cy);
end;
// Возвращаемся горизонтально к x = 0
for var i := 1 to k do
begin
cx := cx - 1;
Writeln(cx, ' ', cy);
end;
end;
end.