스터디 그룹
시간 제한2초메모리 제한128 MB
각 학생의 실력과 아는 알고리즘 집합이 주어질 때, 실력 차이가 D 이하인 학생 집합 중 (합집합 크기 - 교집합 크기) × 학생 수를 최대로 하는 집합을 찾는다.
문제
신입생 현우는 알고리즘 공부가 정말 재밌다. 이번에는 스터디 그룹을 만들어 더 열심히 공부해 보려고 한다.
사공이 많으면 배가 산으로 가는 법이라, 그룹에 참여하는 학생이 너무 많으면 공부가 지지부진해질까 걱정한 현우는 다음 조건을 내걸었다.
그룹에서 가장 잘하는 학생과 가장 못하는 학생의 실력 차이가 이하여야 한다.
또 그룹의 효율성 를 이렇게 정의했다. 그룹원 중 한 명이라도 아는 알고리즘의 수를 , 그룹원 모두가 아는 알고리즘의 수를 , 그룹원의 수를 라고 하면
이다.
현우는 두 조건을 확인하려고 모든 학생의 실력을 수치로 매기고, 중요한 알고리즘 개에 대해 각 학생이 어떤 알고리즘을 아는지 모두 조사했다. 조건을 만족하는 학생의 부분집합 중 효율성이 가장 큰 것을 스터디 그룹으로 삼으려 한다.
현우가 만들 스터디 그룹의 효율성은 얼마인가?
입력
첫 줄에 학생의 수 , 알고리즘의 수 , 실력 차이의 한계 가 주어진다. (, , )
이어서 학생 명의 정보가 두 줄씩 주어진다.
- 첫 줄에 그 학생이 아는 알고리즘의 수 과 그 학생의 실력 가 주어진다. (, )
- 둘째 줄에 그 학생이 아는 알고리즘의 번호 가 개 주어진다. () 한 줄에 적힌 번호는 서로 다르다. 이 0이면 이 줄은 비어 있다.
출력
효율성이 가장 높은 그룹의 효율성을 한 줄에 출력한다. 학생 한 명으로 이루어진 그룹은 항상 조건을 만족하므로 답이 음수가 되는 일은 없다.