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

Задача . C. Настя и неожиданный гость


Если девушка не идет к Денису, то Денис идет к девушке. Руководствуясь таким принципом, молодой человек вышел из дома, купил цветы и направился к Насте.

По пути от его дома до дома его возлюбленной есть дорога из \(n\) полос, перейти которую за один зеленый свет не всегда возможно. Предвидя это, добрый мэр распорядился поставить в некоторых точках этой дороги островки безопасности. Каждый островок расположен после какой-то полосы, а также в начале и в конце дороги. На них пешеходы могут отдохнуть, набраться сил и дождаться зеленого света.

Денис подошел к левому краю дороги ровно в тот момент, когда загорелся зеленый свет. Мальчик знает, что светофор сначала горит \(g\) секунд зеленым, а потом \(r\) секунд красным, потом опять \(g\) секунд зеленым и так далее.

Формально, дорогу можно представить как отрезок \([0, n]\). Изначально Денис стоит в точке \(0\). Его задача - попасть в точку \(n\) за минимальное возможное время.

Oн знает множество различных целых чисел \(d_1, d_2, \ldots, d_m\), где \(0 \leq d_i \leq n\)  — координаты точек, в которых расположены островки безопасности. Только в одной из этих точек мальчик может находиться в момент, когда горит красный свет.

К сожалению, из-за волнения Денис не всегда может контролировать себя, поэтому сейчас на его передвижения наложены некоторые ограничения:

  • Он обязан двигаться всегда, пока горит зеленый, ведь сложно стоять, когда тебя ждет такая девушка. Денис за \(1\) секунду может изменить свое положение на \(\pm 1\). При этом он должен всегда оставаться внутри отрезка \([0, n]\).
  • Он может менять направление движения только на островках безопасности (ведь это безопасно). Это означает, что если за предыдущую секунду мальчик изменил свое положение на \(+1\), то если он находится на островке безопасности, он может изменить свое положение на \(\pm 1\), иначе он может изменить свое положение вновь только на \(+1\). Аналогично, если за предыдущую секунду он изменил свое положение на \(-1\), на островке безопасности он может изменить свое положение на \(\pm 1\), а в любой другой точке вновь только на \(-1\).
  • В момент, когда загорается красный, мальчик должен оказаться на каком-то островке безопасности. Он сможет продолжить движение в любом направлении, когда вновь загорится зеленый.

Считается, что Денис перешел дорогу как только его координата станет равна \(n\).

Эта задача оказалась не так проста, ведь возможно, таким способом даже невозможно перейти дорогу. Так как у Дениса все мысли о любви, он не справился решить ее и попросил нас помочь ему в этом. Найдите минимальное возможное время, за которое он сможет перейти дорогу по таким правилам, либо установите, что это сделать невозможно.

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

В первой строке находится два целых числа \(n\) и \(m\) \((1 \leq n \leq 10^6, 2 \leq m \leq min(n + 1, 10^4))\)  — ширина дороги и количество островков безопасности.

Во второй строке находится \(m\) различных целых чисел \(d_1, d_2, \ldots, d_m\) \((0 \leq d_i \leq n)\)  — точки, в которых расположены островки безопасности. Гарантируется, что среди них есть \(0\) и \(n\).

В третьей строке находится два целых числа \(g, r\) \((1 \leq g, r \leq 1000)\)  — время, которое на светофоре горит зеленый свет и время, которое на светофоре горит красный свет.

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

Выведите одно целое число  — минимальное время, за которое Денис может перейти дорогу по всем правилам.

Если перейти дорогу по всем правилам невозможно выведите \(-1\).

Примечание

В первом тесте оптимальный маршрут такой:

  • за первый зеленый свет дойти до \(7\) и вернуться на \(3\). В этом случае, мы сменим направление движения в точке \(7\), что разрешено, поскольку в этой точке есть островок безопасности. В конце мы окажемся в точке \(3\), где также есть островок безопасности. Следующие \(11\) секунд мы должны подождать красный свет.
  • за второй зеленый свет дойти до \(14\). Снова подождать красный свет.
  • за \(1\) секунду перейти в \(15\). В итоге Денис оказывается в конце дороги.

Всего получается \(45\) секунд.

Во втором тесте невозможно перейти дорогу по всем правилам.


Примеры
Входные данныеВыходные данные
1 15 5
0 3 7 14 15
11 11
45
2 13 4
0 3 7 13
9 9
-1

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

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