Визначимо частковий порядок на трійках \mathbf{a} = (x_a, y_a, z_a) та \mathbf{b} = (x_b, y_b, z_b) таким чином:
\mathbf{a} \prec \mathbf{b}, якщо x_a < x_b, y_a < y_b та z_a < z_b.
Дано набір трійок; знайдіть довжину найдовшої строго зростаючої послідовності трійок \mathbf{a}_1 \prec \mathbf{a}_2 \prec \dotsb \prec \mathbf{a}_k.

Вхід складається з кількох наборів даних. Кожен набір описує набір трійок у такому форматі:
m~n~A~B
x_1~y_1~z_1
x_2~y_2~z_2
x_m~y_m~z_m
Перший рядок містить чотири цілі числа: , , , . Всі значення x_i, y_i, z_i (1 \le i \le m) — невід'ємні цілі числа.
Кожен набір містить m + n трійок. Перші трійок \mathbf{p}_1 до \mathbf{p}_m задані явно (\mathbf{p}_i = (x_i, y_i, z_i)). Решта трійок генеруються так, використовуючи параметри та :
int a = A, b = B, C = ~(1<<31), M = (1<<16)-1;
int r() {
a = 36969 * (a & M) + (a >> 16);
b = 18000 * (b & M) + (b >> 16);
return (C & ((a << 16) + b)) % 1000000;
}Викликайте всього разів, щоб послідовно згенерувати:
Ви можете вважати:
Вхід закінчується рядком з чотирма нулями.
Сума m+n по всіх наборах не перевищує 2 \times 10^6.
Для кожного набору виведіть довжину найдовшої строго зростаючої послідовності трійок з цього набору — тобто найбільше таке, що \mathbf{p}_{i_1} \prec \mathbf{p}_{i_2} \prec \dotsb \prec \mathbf{p}_{i_k}.
Приклад 1