바리스타 폴의 커피콩 고르기

고른 값들의 이웃한 쌍이 k로 나눈 나머지가 같거나 차이가 d 이하가 되도록 주어진 수열에서 가장 긴 부분수열의 길이를 구한다.

보통7동적 계획법세그먼트 트리배열누적 합아직 제출이 없습니다시간 제한1.5초메모리 제한64 MB

문제

바리스타 폴 앞에 커피콩 NN개가 한 줄로 놓여 있다. 폴은 이 중에서 몇 개를 골라 추출한다. 고른 콩은 원래 놓인 순서를 그대로 지킨다.

커피콩마다 종류를 나타내는 정수가 하나씩 붙어 있다. 고른 콩의 종류를 순서대로 적은 수열을 AA라고 하자. 추출물의 질이 좋다는 것은 22 이상인 모든 ii에 대해 다음 두 조건 중 적어도 하나가 성립한다는 뜻이다.

  • Ai1Ai(modk)A_{i-1} \equiv A_i \pmod k
  • Ai1dAiAi1+dA_{i-1} - d \le A_i \le A_{i-1} + d

질이 좋은 추출물 중에서 커피콩을 가장 많이 고를 때, 그 개수를 구하라.

입력

첫째 줄에 NN, kk, dd가 공백으로 구분되어 주어진다. (1N5×1051 \le N \le 5 \times 10^5, 1k,d5×1051 \le k, d \le 5 \times 10^5)

둘째 줄에 커피콩의 종류를 놓인 순서대로 나타낸 길이 NN의 수열 S1,S2,,SNS_1, S_2, \dots, S_N이 주어진다. (1Si5×1051 \le S_i \le 5 \times 10^5)

출력

질이 좋은 추출물에 들어가는 커피콩 개수의 최댓값을 출력한다.