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


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()