좌석 배정
시간 제한2초메모리 제한512 MB
각 승객은 배정된 열에서 s_i행 이내의 행에 있는 좌석이면 열에 상관없이 받아들일 때, 좌석을 받는 승객 수의 최댓값을 구한다.
문제
Divided Airlines라는 항공사가 최근에 지나치게 공격적으로 초과 예약을 하는 것으로 뉴스에 올랐다. 어떤 항공편에서는 승객을 비행기 밖으로 끌어내기까지 했다! 이는 당연히 인기가 없었기 때문에, 항공사는 좌석 배정을 매우 혼란스럽게 만들어 문제를 "해결"하기로 했다(항공사는 불필요한 복잡성을 좋아한다).
어떤 항공편에는 승객이 명 있다. 좌석은 각각 개의 좌석을 가진 개의 열로 나뉜다. 각 승객 는 번째 열의 번째 좌석에 배정된다. 하지만 여러 승객이 같은 좌석에 배정될 수도 있다.
승객들은 보통 자신이 배정된 좌석이 아닌 다른 곳에 앉아도 괜찮아하지만, 원래 좌석에서 어느 정도는 가까이 있고 싶어할 수 있다. 아마 친구와 이야기하고 싶거나, 머리 위 짐칸 근처에 앉고 싶어할 것이다. 더 구체적으로, 승객 는 티켓에 적힌 열에서 최대 개 열만큼 떨어진 곳에 앉는 것을 허용한다.
예산상의 이유로 당신은 Divided 항공편을 타기로 했다. 예상대로 초과 예약된 좌석에 배정된 모든 승객이 서로 싸우기 시작했고, 복잡하게 움직이며 긴 지연을 일으켰다. 당신은 공정한 해결책을 제안했다: 승객이 배정된 좌석에서 얼마나 멀리 앉는 것을 허용하는지를 고려하여, 가능한 많은 승객이 좌석을 받도록 좌석 배정을 구성하겠다고 했다. 이제 남은 것은 이 배정을 실제로 찾는 것이다.
입력
입력은 다음과 같다:
- 정수 , , 가 있는 한 줄(). 각각 승객 수, 항공편의 열 수와 좌석 수이다.
- 정수 , , 가 있는 개의 줄(, , ). 번째 줄에는 번째 승객의 배정된 열 , 좌석 , 최대 거리 가 있다. 최대 거리는 열 단위로 주어진다.
출력
최적의 배정에서 좌석을 받을 수 있는 승객의 최대 수를 출력한다.