가로수 버팀목 (Small)

시간 제한5초메모리 제한512 MB

요약
최대 10그루의 나무마다 지지력 B인 막대 하나 또는 합이 B 이상인 막대 두 개를 배정하고 사용한 지지력 합을 최소화합니다.
난이도

보통10점 중 6점

유형
백트래킹, 정렬
정답자
아직 제출이 없습니다

문제

당신은 G 시의 시장으로 당선되었다. 도시 미화 사업의 하나로 길가에 가로수를 심기로 했는데, 나무를 다 사들인 다음에야 나무가 건강하게 자라려면 버팀목이 필요하다는 사실을 깨달았다.

지금 가지고 있는 나무막대기만으로 사들인 가로수 전부에 버팀목을 댈 수 있는지 알고 싶다. 조건은 다음과 같다.

  • 나무를 한 그루도 빠짐없이 지지해야 한다.
  • 각 나무에 필요한 지지력과 각 나무막대기가 내는 지지력을 모두 알고 있다. 나무 한 그루를 지지하는 데 필요한 지지력은 BB로 모두 같다.
  • 나무를 지지하려면 나무막대기를 버팀목으로 써야 한다. 막대기를 하나만 쓸 때는 그 막대기의 지지력이 BB 이상이어야 한다.
  • 나무막대기는 지지력이 같은 것끼리 묶어 종류로 구분해 두었고, 종류마다 개수를 알고 있다. 막대기 하나는 나무 한 그루에만 쓸 수 있다.
  • 도시 미화 사업이므로 한 나무에 버팀목을 최대 2개까지만 쓸 수 있다. 막대기 두 개를 쓰면 두 지지력의 합만큼의 힘으로 나무를 지탱한다.

위 조건을 모두 만족하는 방법 중에서 사용한 나무막대기의 지지력 합을 최소로 하라.

입력

다음과 같이 변수를 정의한다.

  • TT = 테스트 케이스의 수
  • NN = 나무의 개수
  • BB = 나무 한 그루가 필요로 하는 지지력 (모든 나무에 동일하다)
  • MM = 나무막대기의 종류 수
  • pip_i = ii번째 종류의 나무막대기가 내는 지지력
  • qiq_i = ii번째 종류의 나무막대기 개수

첫 줄에 TT가 주어지고, 이어서 테스트 케이스가 TT개 주어진다. 각 테스트 케이스의 형식은 다음과 같다.

N M B
p1 q1
p2 q2
...
pM qM

제한

  • 모든 입력은 정수로 주어진다.
  • 1≤T≤501 \le T \le 50
  • 1≤N≤101 \le N \le 10
  • 1≤M≤101 \le M \le 10
  • 1≤B≤10001 \le B \le 1000
  • 1≤pi≤20001 \le p_i \le 2000
  • 1≤qi≤201 \le q_i \le 20

출력

각 테스트 케이스마다 Case #x: y 형식으로 한 줄씩 출력한다. xx는 1부터 시작하는 테스트 케이스 번호다. 모든 가로수에 버팀목을 댈 수 있으면 사용한 막대기의 지지력 합의 최솟값을 yy 자리에 출력하고, 불가능하면 yy 자리에 -1을 출력한다.

예제2

  1. 예제 1

    입력
    2
    2 3 10
    6 1
    4 1
    12 2
    2 3 10
    3 1
    5 1
    10 1
    
    예상 출력
    Case #1: 22
    Case #2: -1
    
  2. 예제 2

    입력
    3
    1 1 5
    5 1
    1 1 5
    3 2
    2 2 7
    4 2
    7 1
    
    예상 출력
    Case #1: 5
    Case #2: 6
    Case #3: 15