Загрузка данных


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.