원형 연속 선택 종류 최대화
원형 벨트 위에 접시 N개가 놓여 있고, 각 접시에는 메뉴 종류를 나타내는 번호가 붙어 있다. 같은 종류의 접시가 여러 개 있을 수 있다.

손님은 다음 규칙으로 접시를 먹는다.
- 벨트의 임의의 한 위치에서 시작해, 회전 방향을 따라 연속한 k개의 접시를 먹는다.
- 손님은 메뉴 종류 하나가 적힌 쿠폰을 갖고 있어서, 그 종류의 접시 하나를 추가로 먹을 수 있다. 쿠폰에 적힌 종류가 벨트 위에 없어도 새로 만들어 제공되므로 항상 먹을 수 있다.
손님은 가능한 한 다양한 종류를 맛보고 싶다. 위 그림의 예에서 k=4이고 쿠폰 번호가 30이라면, 연속 4개로 서로 다른 4가지 종류를 먹을 수 있는 구간은 (9, 7, 30, 2), (30, 2, 7, 9), (2, 7, 9, 25)의 세 가지다. 이 중 (2, 7, 9, 25)를 고르면 쿠폰으로 30번을 추가해 총 5가지 종류를 먹게 된다.
벨트의 접시 배치, 메뉴 종류 수, 연속해서 먹는 접시 수, 쿠폰 번호가 주어질 때, 손님이 먹을 수 있는 종류 수의 최댓값을 구하는 프로그램을 작성하라.
입력
첫 번째 줄에 벨트에 놓인 접시의 수 N, 메뉴의 가짓수 d, 연속해서 먹는 접시의 수 k, 쿠폰 번호 c가 공백으로 구분되어 주어진다. 각 값의 범위는 2 ≤ N ≤ 30,000, 2 ≤ d ≤ 3,000, 2 ≤ k ≤ 3,000 (k ≤ N), 1 ≤ c ≤ d이다. 이어지는 N개의 줄에는 벨트의 한 위치에서 출발해 회전 방향을 따라갈 때 만나는 접시의 메뉴 종류(1 이상 d 이하의 정수)가 한 줄에 하나씩 주어진다.
출력
주어진 벨트에서 먹을 수 있는 메뉴 가짓수의 최댓값을 하나의 정수로 출력한다.
예제 입력 1
8 30 4 30
7
9
7
30
2
7
9
25
예제 출력 1
5
예제 입력 2
8 50 4 7
2
7
9
25
7
9
7
30
예제 출력 2
4