Олимпиадный тренинг

Задача . C. Будильники повсюду


Сейчас Иван собирается пойти спать и хочет поставить будильник. Завтра произойдет много важных событий, \(i\)-е из них начнется в \(x_i\)-ю минуту. Иван не хочет пропускать ни одного из них, поэтому он хочет поставить будильник таким образом, чтобы он звонил в течение минут \(x_1, x_2, \dots, x_n\), чтобы он смог проснуться в течение каждой из этих минут (заметьте, что не важно, что будильник может звонить в течение любой другой минуты).

Иван может выбрать два свойства будильника — первую минуту, когда он зазвонит (обозначим ее как \(y\)) и интервал между двумя последовательными звонками (обозначим его за \(p\)). После того, как Иван поставит будильник, он будет звонить в течение минут \(y, y + p, y + 2p, y + 3p\) и так далее.

Иван может выбрать любую минуту как первую, но он не может выбирать произвольное значение \(p\). Он может выбрать его только среди значений \(p_1, p_2, \dots, p_m\) (его телефон не поддерживает других вариантов этого свойства).

Таким образом, Иван хочет выбрать первую минуту \(y\), когда будильник начнет звонить и интервал между двумя последовательными звонками \(p_j\) таким образом, чтобы он звонил в течение всех заданных минут \(x_1, x_2, \dots, x_n\) (и не важно, что он может звонить в любые другие минуты).

Ваша задача — сообщить первую минуту \(y\) и индекс \(j\) такие, что если Иван поставит будильник со свойствами \(y\) и \(p_j\), то он будет звонить в течение всех заданных минут \(x_1, x_2, \dots, x_n\) или сказать, что невозможно выбрать такие значения заданных свойств. Если существует несколько ответов, вы можете вывести любой.

Входные данные

Первая строка входных данных содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 3 \cdot 10^5, 1 \le m \le 3 \cdot 10^5\)) — количество событий и количество возможных значений интервалов между звонками.

Вторая строка входных данных содержит \(n\) целых чисел \(x_1, x_2, \dots, x_n\) (\(1 \le x_i \le 10^{18}\)), где \(x_i\) равно номеру минуты, когда начнется \(i\)-е событие. Гарантируется, что все \(x_i\) заданы в возрастающем порядке (то есть выполняется условие \(x_1 < x_2 < \dots < x_n\)).

Третья строка входных данных содержит \(m\) целых чисел \(p_1, p_2, \dots, p_m\) (\(1 \le p_j \le 10^{18}\)), где \(p_j\) равно \(j\)-му значению интервала между двумя последовательными сигналами.

Выходные данные

Если невозможно выбрать такие значения \(y\) и \(j\), что все ограничения выполняются, выведите «NO» в первой строке.

Иначе выведите «YES» в первой строке. Затем выведите два целых числа \(y\) (\(1 \le y \le 10^{18}\)) и \(j\) (\(1 \le j \le m\)) во второй строке, где \(y\) — первая минута, когда будильник Ивана должен начать звонить, а \(j\) — индекс значения интервала между двумя последовательными звонками (значения пронумерованы от \(1\) до \(m\) в порядке входных данных) такие, что будильник будет звонить в течение всех заданных минут \(x_1, x_2, \dots, x_n\). Если существует несколько возможных ответов, выведите любой.


Примеры
Входные данныеВыходные данные
1 3 5
3 12 18
2 6 5 3 3
YES
3 4
2 4 2
1 5 17 19
4 5
NO
3 4 2
1 5 17 19
2 1
YES
1 1

time 3000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
С++ Mingw-w644
Комментарий учителя