Условие недоступно на русском языке
I. 수열 재활용
time limit per test
2 seconds
memory limit per test
1024 megabytes
input
standard input
output
standard output

경희대학교 알고리즘 동아리 KHUA에서는 축하할 일이나 기념할 일이 있을 떄 선물로 수열을 주고받는 PS계의 문화를 본받아 신입 부원들에게 선물로 수열을 나누어 주려고 한다. 하지만 매번 새로운 수열을 만들어 내는 것은 귀찮기 때문에 수열 하나를 만들어 두고 그것을 재활용해서 새로운 수열을 만들어 내기로 했다.

재활용할 무한한 길이의 주기 수열 A1, A2, ...를 만든다. A의 첫 N개 원소는 A1, A2, ..., AN로 주어지며, i > N일 때 Ai = Ai - N이다. 이 수열의 각 원소는 0 이상 M - 1 이하의 정수이다. 1 이상 N 이하인 정수 i0 이상 M - 1 이하의 정수 j에 대해 다음과 같이 정의되는 길이 T (T ≤ N)인 수열 Bi, j1, Bi, j2, ..., Bi, jT을 선물로 나누어 주면 좋겠다고 생각했다.

Bi, jk = (Ai + k + j) modM

하지만 이렇게 만들어진 수열이 중복되면 사람들이 수열을 재활용하고 있다는 걸 알아챌 수 있으므로 이런 상황은 최대한 피하려고 한다.

재활용해 만들어낸 임의의 두 수열이 같을 확률을 구해 얼마나 수열을 재활용할 수 있을 지 예측하려고 한다. 1 ≤ i1, i2 ≤ N이고 0 ≤ j1, j2 ≤ M - 1인 정수 i1, i2, j1, j2를 균일한 확률로 무작위로 뽑았을 때 Bi1, j1Bi2, j2가 서로 같을 확률을 구해야 한다. 각 수는 독립적으로 선택되므로 (i1, j1) = (i2, j2)인 경우도 발생할 수 있다. 이 경우를 포함하여 확률을 구해야 한다.

Input

첫 줄에 정수 NM이 공백으로 구분되어 주어진다. (1 ≤ N, M ≤ 105)

둘째 줄에 N개의 정수 A1, A2, ..., AN이 공백으로 구분되어 주어진다. (0 ≤ Ai ≤ M - 1)

셋째 줄에 정수 T가 주어진다. (1 ≤ T ≤ N)

Output

재활용해서 만든 두 수열이 같을 확률을 출력하라. 구한 확률이 기약분수로 나타냈을 때 {P} / {Q}라면 를 대신 출력하라. 여기서 Q - 1109 + 7에 대한 Q의 모듈러 역원이다.

Examples
Input
6 4
1 2 1 2 3 0
2
Output
180555557
Input
3 1
0 0 0
2
Output
1
Input
5 10
1 1 2 3 5
3
Output
140000001
Input
28 12
0 3 1 2 3 1 2 1 2 5 8 6 7 8 6 7 6 7 10 1 11 0 1 11 0 11 0 3
3
Output
724489801
Note

첫 번째 예제의 확률은 13 / 72이다.

두 번째 예제에서는 선택할 수 있는 수열이 (0, 0) 하나밖에 없으므로 두 수열이 같을 확률은 1이다.

세 번째 예제의 확률은 1 / 50으로, (i1, j1) = (i2, j2)인 경우에만 두 수열이 같다.