gRanks (Small)

각 선수의 가중 점수 중 상위 M개만 합산해 순위를 매기고 동점은 이름순으로 나열합니다.

쉬움3정렬해시맵시뮬레이션면접 대비아직 제출이 없습니다시간 제한5초메모리 제한512 MB

문제

세계에는 뛰어난 선수가 많다. 서로 다른 선수가 서로 다른 대회에서 우승하면 누가 가장 강한지 가리기 어렵다. 다음은 선수의 순위를 매기는 한 가지 방법이다.

  1. 대회에서 점수를 받는 상위 등수의 개수 PP와, ii등에게 주어지는 점수 SiS_i를 정한다. 예를 들어 P=3P = 3이면 1등 1000점, 2등 500점, 3등 300점으로 정하고 그 아래 등수는 0점으로 둔다. 한 대회 안에 공동 등수는 없다.
  2. 대회마다 중요도가 다르므로 각 대회에 가중치 WiW_i를 매긴다. 선수가 한 대회에서 얻는 점수는 1번에서 정한 등수 점수에 그 대회의 가중치를 곱한 값이다. 올림픽의 가중치가 5라면 위의 예에서 올림픽 우승자는 5×1000=50005 \times 1000 = 5000점을 얻는다.
  3. 대회에 많이 나갔다는 이유만으로 유리해지지 않도록, 각 선수가 얻은 점수 중 큰 것부터 MM개만 더해 합계 점수로 삼는다. M=2M = 2이고 어떤 선수가 세 대회에서 1000×51000 \times 5, 500×1500 \times 1, 300×3300 \times 3점을 얻었다면 5000과 900만 더한다.

등수별 점수, 각 대회의 가중치, 대회 결과가 주어진다. 입력에 등장하는 모든 선수의 순위를 매겨라.

입력

첫 줄에 테스트 케이스의 개수 TT가 주어진다. 이어서 TT개의 테스트 케이스가 주어지며, 각 테스트 케이스는 다음과 같이 이루어진다.

  1. 첫 줄에 점수를 받는 상위 등수의 개수 PP.
  2. 둘째 줄에 1등부터 PP등까지의 점수 S1,S2,,SPS_1, S_2, \dots, S_P가 등수 순서대로 PP개.
  3. 셋째 줄에 대회의 수 NN.
  4. 다음 NN개 줄에 각 대회의 결과가 한 줄에 하나씩. 각 줄은 그 대회의 가중치 WiW_i로 시작하고, 이어서 상위 PP등에 든 선수의 이름이 1등부터 차례대로 PP개 주어진다.
  5. 마지막 줄에 한 선수의 합계에 반영되는 대회 수의 최댓값 MM.

출력

각 테스트 케이스마다 먼저 Case #x:를 한 줄에 출력한다. xx는 1부터 시작하는 테스트 케이스 번호다. 그다음 입력에 등장한 모든 선수를 한 줄에 한 명씩 r: name 형식으로 출력한다. rr은 그 선수의 순위, namename은 이름이다.

선수의 순위는 자신보다 합계 점수가 높은 선수의 수에 1을 더한 값이다. 따라서 합계 점수가 같은 선수는 같은 순위를 받고, 그다음 순위는 같은 순위를 받은 인원수만큼 건너뛴다. 순위가 높은 선수부터 출력하고, 순위가 같으면 이름의 사전순으로 출력한다. 테스트 케이스 사이에 빈 줄을 넣지 않는다.

제한

  • 1T101 \le T \le 10
  • 1P101 \le P \le 10
  • 1Si10001 \le S_i \le 1000
  • Si>Si+1S_i > S_{i+1}
  • 1N101 \le N \le 10
  • 1Wi10001 \le W_i \le 1000
  • 1M101 \le M \le 10
  • 선수 이름은 A부터 Z까지의 문자로만 이루어지고, 길이는 10 이하다.

힌트

첫 번째 예제에서 BOLT는 두 대회에서 합계 7000점을 얻어 1위다. GAY는 네 대회의 점수를 모두 더하면 8500점이지만 상위 두 개만 세므로 6500점이 되어 2위다. PEIMENG과 TIANBING은 둘 다 1500점이라 공동 3위이고, 이름의 사전순으로 나열한다. 공동 3위가 두 명이므로 그다음 순위는 4위가 아니라 5위이고, 1000점을 얻은 LARRY가 5위다.