C. Мусор
Имя входного файла: | garbage.in |
Имя выходного файла: | garbage.out |
Ограничение по времени: | 2 s |
Ограничение по памяти: | 256 megabytes |
Дед Олег поссорился со своим соседом Фёдором. Решив просто так не сдаваться, Олег задумал диверсию – набросать своему соседу под забор мусора.
Олег не хочет мусорить абы где, поэтому он выделил N точек вдоль забора Фёдора (забор длинный, поэтому его можно считать просто прямой линией), в которых он может намусорить. У Олега хватает мусора, чтобы набросать его в K различных точках, причём он хочет, чтобы разных куч мусора было ровно K.
Олегу не чуждо чувство прекрасного, поэтому он не хочет, чтобы расстояние между двумя любыми кучами мусора было меньше R. Олег не хочет ограничиваться одним разом, поэтому он каждую ночь решил приходить к забору своего соседа и мусорить. Однако чтобы его не заподозрили, Олег решил каждый день раскидывать мусор по-разному (два способа различны, если существует хотя бы одна точка, в которой в первом способе есть мусор, а во втором нет).
Олега интересует, сколько дней он сможет таким образом донимать своего соседа. Так как ответ может быть очень большим (Олег весьма изобретателен), он просит вас посчитать это число по модулю 109+7.
Формат входного файла
Первая строка входного файла содержит три целых числа N, K и R (1 ≤ N ≤ 105, 1 ≤ K ≤ 50 1 ≤ R ≤ 109) – количество точек для мусора, количество куч, которые хочет сделать Олег и минимальное расстояние между замусоренными точками, соответственно. Вторая строка входного файла содержит N целых чисел 0 ≤ di ≤ 109 – расстояние до i-й точки от начала забора, все расстояния различны.
Формат выходного файла
В выходной файл выведите единственное число – ответ по модулю 109 + 7.
Пример:
garbage.in | garbage.out |
---|---|
3 2 1 1 2 3 | 3 |
3 2 2 1 2 3 | 1 |
Источник: Открытый зимний чемпионат ПетрГУ по программированию, 15 декабря 2013
Обсудить
Отправить решение
Версия для печати