import sys
def solve():
input_data = sys.stdin.read().split()
if not input_data:
return
n = int(input_data[0])
orig_x = int(input_data[1])
orig_y = int(input_data[2])
dist = abs(orig_x) + abs(orig_y)
# Проверка на возможность построения
if n < dist or (n - dist) % 2 != 0:
print(-1)
return
# Шаг 1: Приводим к положительным координатам
sx = 1 if orig_x >= 0 else -1
sy = 1 if orig_y >= 0 else -1
x = abs(orig_x)
y = abs(orig_y)
# Шаг 2: Обеспечиваем x >= y
swapped = False
if x < y:
x, y = y, x
swapped = True
k = (n - (x + y)) // 2
# Шаг 3: Построение пути
path = [(0, 0)]
if k > 0:
# Зубец глубиной k для траты 2k шагов
for step in range(1, k + 1):
path.append((0, -step))
path.append((1, -k))
for step in range(k - 1, -1, -1):
path.append((1, -step))
cur_x = 1
else:
cur_x = 0
# Движение вправо до x
for step_x in range(cur_x + 1, x + 1):
path.append((step_x, 0))
# Движение вверх до y
for step_y in range(1, y + 1):
path.append((x, step_y))
# Шаг 4: Обратное преобразование координат
result = []
for px, py in path:
if swapped:
px, py = py, px
rx = px * sx
ry = py * sy
result.append(f'{rx} {ry}')
sys.stdout.write('\n'.join(result) + '\n')
if __name__ == '__main__':
solve()