First to Solve
시간 제한5초메모리 제한512 MB
문제를 무작위 순서로 푸는 대회에서 각 참가자가 가장 먼저 해결한 문제 수의 기댓값을 998244353으로 나눈 나머지로 구한다.
문제
유명한 Forcedeltas Programming Contest에는 명의 참가자, 개의 문제가 있고, 대회는 분 동안 진행된다.
각 참가자 와 각 문제 에 대해 정수 가 주어진다. 이면 참가자 는 문제 를 풀 수 없다. 그렇지 않으면 참가자 는 문제 를 정확히 분에 풀 수 있다.
모든 참가자는 같은 전략을 따른다. 각 참가자는 자신이 풀 수 있는 모든 문제의 목록을 만들고, 그 목록을 균일하게 무작위로 섞은 뒤, 목록이 끝나거나 대회가 끝날 때까지 그 순서대로 문제를 푼다.
예를 들어, 참가자 의 목록이 섞인 뒤 와 같다면, 참가자는 분에 문제 을 풀고, 분에 문제 를 푸는 식이다. 어떤 문제도 분 이후에는 풀 수 없다.
참가자 가 문제 를 다른 어떤 참가자보다 엄격하게 늦지 않게 풀면, 참가자 가 문제 의 First to Solve 상을 받는다고 한다. 즉, 여러 참가자가 같은 문제의 상을 받을 수 있다.
각 참가자가 받을 상의 기댓값을 으로 나눈 나머지로 구하라 (자세한 내용은 출력 부분을 참고하라).
입력
첫째 줄에 세 정수 , , 가 주어진다. 이는 참가자의 수, 문제의 수, 대회 시간(분)이다 (; ; ).
다음 개의 줄 중 번째 줄에는 개의 정수 이 주어진다 (). 이 중 번째 정수는 참가자 가 문제 를 푸는 데 필요한 분 수를 나타내며, 참가자 가 문제 를 풀 수 없으면 이다.
출력
참가자 이 받을 상의 기댓값을 으로 나눈 나머지로 개 출력한다.
형식적으로, 이라 하자. 상의 기댓값은 기약분수 로 나타낼 수 있으며, 와 는 정수이고 이다. 과 같은 정수를 출력하라. 즉, 이고 인 정수 를 출력하라.
힌트
예제에서 참가자 은 항상 문제 의 상을 받고, 참가자 는 항상 문제 의 상을 받으며, 참가자 이 받을 상의 기댓값은 , 참가자 는 상을 전혀 받지 못하고, 참가자 가 받을 상의 기댓값은 이다.