모든 정규직 개발자와 중요한 애플리케이션에 짝을 지어 주면서 총 이익을 최대로 만들고, 불가능하면 -1을 출력한다.
보통7그래프동적 계획법비트 연산아직 제출이 없습니다시간 제한2초메모리 제한512 MB당신은 이란의 안드로이드 앱 마켓 Cafebazaar에서 제품 관리자로 일한다. 1년 계획으로 개발할 애플리케이션 목록을 정리했고, 목록에 있는 애플리케이션마다 알맞은 개발자를 배정해야 한다. Cafebazaar에는 개발자가 n명 있고, 그중 일부는 정규직이며 나머지는 시간제다. 목록에 있는 애플리케이션은 m개이고, 그중 일부는 사업상 필수이며 나머지는 일반 애플리케이션이다.
개발자마다 잘하는 분야가 다르다. 어떤 애플리케이션은 능숙하게 개발하지만 어떤 애플리케이션은 아예 개발하지 못한다. 개발자 i가 애플리케이션 j를 개발할 능력이 있으면, 계획에서 그 개발자를 그 애플리케이션에 배정해 xi,j만큼의 이익을 얻는다. 개발할 능력이 없는 애플리케이션에는 그 개발자를 배정하지 못한다. 시간과 비용을 아끼려고 개발자 한 명은 최대 한 개의 애플리케이션에 배정하고, 애플리케이션 하나에는 최대 한 명의 개발자를 배정한다.
다음 두 조건을 모두 만족하는 개발 계획을 적절한 계획이라고 한다. 첫째, 정규직 개발자가 모두 계획에 참여해서 아무도 실망하지 않는다. 둘째, 필수 애플리케이션에 빠짐없이 개발자가 배정되어 고객을 잃지 않는다. 다시 말해 정규직 개발자는 각각 정확히 한 개의 애플리케이션에 배정되고, 필수 애플리케이션에는 각각 정확히 한 명의 개발자가 배정된다. 적절한 계획에서도 시간제 개발자를 애플리케이션에 배정할 수 있고, 일반 애플리케이션에 개발자를 배정할 수 있다. 이익의 합이 최대인 적절한 계획을 찾아라.
입력에는 테스트 케이스가 여러 개 있다. 각 테스트 케이스의 첫 줄에는 개발자의 수 n과 애플리케이션의 수 m이 공백으로 구분되어 주어진다 (1≤n,m≤100). 다음 줄에는 정규직 개발자의 수 t (0≤t≤n)가 먼저 주어지고, 이어서 정규직 개발자의 번호가 t개 주어진다. 개발자의 번호는 1부터 n까지다. 다음 줄에는 필수 애플리케이션의 수 s (0≤s≤m)가 먼저 주어지고, 이어서 필수 애플리케이션의 번호가 s개 주어진다. 애플리케이션의 번호는 1부터 m까지다. 이어지는 n개의 줄에는 개발자 한 명당 한 줄씩 정보가 주어진다. i번째 줄 (1≤i≤n)에는 개발자 i가 개발할 수 있는 애플리케이션의 수 di (0≤di≤m)가 먼저 주어지고, 이어서 정수 쌍 ai,j와 xi,j가 di개 주어진다 (1≤j≤di, 1≤ai,j≤m, 1≤xi,j≤106). ai,j는 개발자 i가 개발할 수 있는 애플리케이션의 번호이고, xi,j는 애플리케이션 ai,j를 개발자 i가 개발할 때 얻는 이익이다. 한 개발자의 목록에서 같은 애플리케이션 번호가 두 번 나오지는 않는다. 입력의 마지막 줄에는 0 0이 주어지며 이 줄은 처리하지 않는다. 테스트 케이스는 최대 20개다.
각 테스트 케이스마다 적절한 계획으로 얻을 수 있는 이익의 최대 합을 한 줄에 출력한다. 적절한 계획이 없으면 그 줄에 -1을 출력한다.