아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

퀴즈

면접 대비

시간 제한1초메모리 제한1024 MB

요약
N개의 문제 중 최대 K개를 골라 풀되, 한 분야의 모든 문제를 풀면 보너스 B를 받을 때 얻을 수 있는 최대 점수를 구한다.
난이도

보통10점 중 6점

유형
그리디, 정렬, 동적 계획법, 배열
정답자
아직 제출이 없습니다

문제

퀴즈 ProgrammeringsQuiz에는 총 NN개의 문제가 있고, 이 문제들은 MM개의 서로 다른 분야(예를 들어 알고리즘 이론, 컴파일러 제작, Sven 지식)에 나뉘어 있다.

문제마다 배점이 다르다. 또한 어떤 분야의 모든 문제를 맞히면 보너스 BB점을 받는다. Simone은 8학년 때부터 Programmeringsolympiaden에 참가해 왔기 때문에 모든 문제를 맞힐 수 있다.

아쉽게도 퀴즈에는 시간 제한이 있다. 틀린 답을 낸 적은 없지만, Simone은 KK개의 문제만 풀 시간이 있다. Simone이 얻을 수 있는 최대 점수는 얼마인가?

입력

첫째 줄에 네 정수 1≤N≤10001 \le N \le 1000, 1≤M≤N1 \le M \le N, 1≤K≤N1 \le K \le N, 1≤B≤100 0001 \le B \le 100\,000이 주어진다. 다음 NN개의 줄에는 정수 두 개씩 주어진다. 문제를 맞혔을 때 받는 점수(1과 1 0001\,000 사이의 정수)와 그 문제가 속한 분야(11과 MM 사이)이다. 각 분야에는 문제가 최소 하나 있다.

출력

얻을 수 있는 최대 점수를 한 줄에 출력한다.

힌트

첫 번째 예시에서 Simone은 분야 1의 두 문제(300+400=700300 + 400 = 700점)와 분야 2의 유일한 문제(200200점)를 푼다. 이 두 분야의 문제를 모두 풀었으므로 보너스를 두 번 받고, 합계는 200+700+2⋅1000=2900200 + 700 + 2 \cdot 1000 = 2900점이 된다.

예제2

  1. 예제 1

    입력
    5 3 3 1000
    300 1
    400 1
    200 2
    200 3
    300 3
    
    예상 출력
    2900
    
  2. 예제 2

    입력
    5 3 3 1
    300 1
    400 1
    200 2
    300 3
    200 3
    
    예상 출력
    1001