출근하기 싫어 2

시간 제한1초메모리 제한1024 MB

요약
각 직원의 총 근무 시간이 주어질 때, 매 30분마다 최대 2명만 결근하는 M시간 동안의 출근 조합의 수를 센다.
난이도

어려움10점 중 8점

유형
조합론, 동적 계획법, 수학, 누적 합
정답자
아직 제출이 없습니다

문제

이 문제는 출근하기 싫어 1과 굵은 글씨로 적힌 부분과 제한 조건만 다릅니다.

누구나 그렇듯 동우는 출근하기 싫다. 그래도 출근해야 한다.

동우가 다니는 회사는 신기한 회사이다. 총 NN명의 직원이 있는데, 이 중 최대 22명이 출근하지 않아도 업무를 정상적으로 진행할 수 있다. 하지만 22명보다 많이 출근하지 않으면 업무를 정상적으로 진행할 수 없다.

동우는 회사의 업무가 정상적으로 진행되는 것이 신기해 현재 시각으로부터 최근 MM시간 동안 NN명의 직원 각각이 총 몇 시간씩 출근했는지 살펴보았다.

직원들은 모두 정각에만 출근해 정각에만 퇴근하며, 한 사람이 여러 번 출근 혹은 퇴근할 수 있다. 최근 MM시간 동안 업무를 계속 정상적으로 진행할 수 있도록 하는, NN명의 직원이 출근한 조합의 경우의 수를 구하시오.

이때, MM시간에 대해 매시 30분을 기준으로 출근해 있는 직원들의 목록이 한 번이라도 다른 경우 서로 다른 조합으로 간주한다. 현재는 정각이라 가정한다.

입력

첫 번째 줄에 직원의 수 NN과 동우가 살펴본 최근 시간의 길이를 나타내는 정수 MM이 공백으로 구분되어 주어진다. (1≤N,M≤5,000)(1\le N, M\le 5\\,000)

두 번째 줄에 NN명의 직원이 최근 MM시간 동안 출근한 시간 A_1,A_2,⋯ ,A_NA\_1, A\_2, \cdots, A\_N이 공백으로 구분되어 주어진다. (0≤A_i≤M)(0\le A\_i \le M)

출력

직원이 출근한 조합으로 가능한 경우의 수를 109+710^9+7로 나눈 나머지를 출력한다.

단, 109+710^9+7은 소수이다.

예제7

  1. 예제 1

    입력
    2 4
    3 3
    
    예상 출력
    16
    
  2. 예제 2

    입력
    3 4
    4 3 3
    
    예상 출력
    16
    
  3. 예제 3

    입력
    3 5
    1 1 2
    
    예상 출력
    0
    
  4. 예제 4

    입력
    2 4
    2 2
    
    예상 출력
    36
    
  5. 예제 5

    입력
    3 5
    4 3 4
    
    예상 출력
    230
    
  6. 예제 6

    입력
    3 5
    3 3 3
    
    예상 출력
    690
    
  7. 예제 7

    입력
    2 10
    5 7
    
    예상 출력
    30240