경쟁이 있는 민간 건강보험 시장에서는 환자가 자신에게 가장 잘 맞는 플랜을 고를 수 있다고 여겨진다. 하지만 실제로는 앞으로 어떤 진료가 필요할지 미리 예측하기 어렵고, 약관을 읽어 무엇이 보장되고 무엇이 보장되지 않는지 파악하는 일도 간단하지 않다. 이 문제에서는 여러 건강보험 플랜의 설명(보험료와 본인부담금)과 앞으로 1년간 예정된 병원 방문 목록이 주어진다. 각 플랜을 선택했을 때의 총비용을 계산해야 한다.
설명을 해석하는 규칙은 다음과 같다.
. 로 끝난다. 그 밖의 구두점(공백, 줄바꿈, 쉼표, 세미콜론)은 무시한다.., ,, ;, 그리고 문자 % 와 $ 만 등장한다. 모든 수는 정수이다.설명에는 다음 정보가 담긴다.
plan 이 있으면, 그 문장에서 plan 바로 다음 단어가 설명 대상 플랜의 이름이다. 그다음으로 plan 을 포함하는 문장이 나오기 전까지의 모든 정보는 그 플랜에 대한 것이다.premium 을 포함하는 문장에서, 앞이나 뒤에 달러 기호가 붙었거나 뒤에 단어 dollars 가 오는 정수가 그 플랜의 보험료(달러)이다. 그런 수는 정확히 하나뿐이다.copayment 또는 copay 를 포함하는 문장에서는 다음과 같다.
dollars 가 오는 정수는 본인부담금의 최대 금액(달러)이며, 그보다 더 많이 청구되는 일은 결코 없다.percent 가 오는 정수는 실제 진료비에 대한 비율로 표현된 본인부담금이다.per visit 또는 total 이 있는지에 따라 결정된다. 둘 다 없으면 총합(total)으로 본다. 둘 다 있으면 회당(per visit)으로 본다. (보험료에는 회당/총합 구분이 없다.)premium 또는 copayment/copay 중 최대 하나만 포함하며, 단어 plan 도 최대 한 번만 포함한다.0 이다.플랜 설명 다음에는 병원 방문 목록이 주어지며, 각 방문은 그 진료비를 나타내는 하나의 정수로 표시된다. 각 플랜에 대해 총지출(보험료 + 본인부담금)을 구하는 것이 목표이다.
첫 줄에 데이터 집합의 개수 K 가 주어진다. 이어서 K 개의 데이터 집합이 각각 다음 형식으로 주어진다.
m 과 n 이 주어진다 ($1 \le m, n \le 1000$).m 개의 줄은 건강보험 플랜을 설명하는 텍스트이다. 각 줄은 최대 80자이다. 플랜은 항상 하나 이상 존재한다. 한 줄에 여러 문장이 있을 수 있고, 한 문장이 여러 줄에 걸칠 수도 있다.n 개의 줄에는 각각 정수 하나, 즉 한 번의 병원 방문 진료비가 주어진다.각 데이터 집합에 대해, 먼저 Data Set x: 를 한 줄에 출력한다. 여기서 x 는 데이터 집합의 번호(1부터 시작)이다. 그다음, 텍스트에서 처음 언급된 순서대로 각 플랜의 총지출(보험료 + 본인부담금)을 소수점 아래 두 자리로 반올림하여 한 줄에 하나씩 출력한다. 연속한 데이터 집합 사이는 빈 줄로 구분한다.