Городки — русская спортивная игра. В ней нужно с помощью меткого броска биты, шеста или другой палки уничтожать так называемые «городки» — постройки из маленьких деревянных брусков.

Но время не стоит на месте, и теперь уничтожением построек занимаются не люди, а роботы. Правила игры очень просты. На огромном поле расположены 2 · N городков с целочисленными координатами, объединённых в пары (то есть, всего N пар городков), среди которых нет двух городков с одинаковыми координатами. В наличии имеется N роботов — машинок, работающих на масле. В начале игры робот высаживается на любой неразрушенный городок и тут же разбивает его, сам робот при этом остаётся целым. Затем этот робот должен доехать до соответствующего второго городка из пары. Маршрут может быть любым, в том числе прямой, ломаной или кривой линией. Доехав до второго городка из пары, робот тихонько самоуничтожается, разрушая этот и только этот городок. После уничтожения робота высаживается новый робот, разрушая один из городков при высадке, затем он доезжает до второго городка из пары и самоуничтожается, разрушая этот городок. Это происходит до тех пор, пока все N роботов не самоуничтожены, и все 2 · N городков не разрушены. Путь робота должен не проходить ни через один городок, кроме тех двух, которые он должен разрушить.
Каждый робот имеет конструктивный недостаток: во время перемещения из него постоянно выливается масло. При движении робота за ним остаётся масляный след в виде непрерывной кривой линии, которая в точности повторяет его маршрут. При попадании на масляный след робот тут же выходит из строя, делая невозможным успешное завершение игры, поэтому пути роботов должны не пересекаться.
Чтобы сделать игру более захватывающей, на поле начертили масляный след в виде прямоугольника с координатами вершин (0; 0), (W; 0), (W; H), (0; H). Городки могут располагаться как вне прямоугольника, так и внутри, и на самом прямоугольнике. Робот никогда не ломается при высадке на городок, даже если тот был прямо на границе прямоугольника, но робот сломается, если наедет на начерченный след. Городок всегда разбивается, когда до него добирается робот, даже если этот городок стоял на границе прямоугольника.
Считается, что размеры роботов и городков и толщина масляных следов настолько малы, что роботов и городки можно считать точками, а следы — кривыми линиями.
Игра считается проваленной, если один из роботов ломается, не разбив второй городок из пары, до которого должен был доехать. Если все N пар городков разрушены N роботами, то игра считается выигранной.
Требуется определить, можно ли так составить маршруты роботов, чтобы разбить все городки.
Исходные данные
В первой строке через пробел записаны три целых числа: N, W и H — количество пар городков, ширина прямоугольника и высота прямоугольника соответственно (1 ≤ N ≤ 105, 1 ≤ W, H ≤ 108).
В каждой из следующих N строк через пробел записаны по 4 целых числа x1, y1, x2, y2, где (x1; y1) — координаты первого городка из пары, а (x2; y2) — координаты второго городка из этой же пары (−108 ≤ x1, y1, x2, y2 ≤ 108).
Гарантируется, что координаты всех городков попарно различны; это относится как к городкам из одной пары, так и к городкам из разных пар.
Результат
В качестве ответа в единственной строке требуется вывести «YES» (без кавычек), если можно разбить все городки с помощью N роботов, и «NO» (без кавычек) в противном случае.
Примеры
| исходные данные | результат |
|---|
1 2 2
-1 1 3 1
| YES
|
3 4 4
0 0 3 3
4 0 1 3
2 4 2 0
| YES
|
3 4 4
0 0 4 4
4 0 0 4
2 4 2 0
| NO
|
Автор задачи: Валентин Зуев
Источник задачи: Вузовско-академическая олимпиада по информатике 2020