컵 쌓기

면접 대비

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

요약
각 컵의 높이가 주어질 때, 높이 합이 정확히 H가 되는 포개는 순서의 경우의 수를 구한다.
난이도

보통10점 중 5점

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

문제

주식회사 푸앙의 추종자인 잇창명은 푸앙에서 생산하는 NN종류의 컵을 가지고 있다. 이 회사에서 생산하는 컵은 쉽게 정리할 수 있도록 종류에 상관없이 컵의 입구 사이에 빈틈이 없도록 포개어진다는 장점이 있다. 편의상, 이 문제에서는 컵의 몸통 부분을 제외한 입구 부분만 생각하기로 하자.

가지고 있는 컵을 포개어 정리하던 잇창명은 문득 컵의 입구 부분의 높이 총합이 HH가 되도록 컵을 포갤 수 있는 경우의 수가 궁금해졌다. 모든 종류의 컵은 무한히 많이 있으며, 각 종류의 컵은 입구의 높이가 정해진 단위 높이 11의 양의 정수배에 해당한다. 또한, 컵을 포갤 때는 입구가 위로 오도록 포개어야 한다.

아래와 같이 입구의 높이가 각각 11, 11, 22, 33인 컵 세트를 사용해 구체적인 예시를 들어 보자.

위의 네 종류의 컵을 입구 부분의 높이가 1010이 되도록 쌓는 방법은 아래의 그림 이외에도 여러 가지가 있으며, 그 경우의 수를 모두 합하면 9,0039\\,003가지이다.

잇창명을 위해 컵을 포개는 경우의 수를 구하는 프로그램을 작성해 보자.

입력

첫 번째 줄에 NN과 HH가 주어진다.

두 번째 줄에 NN종류의 컵의 높이 A_1A\_1, A_2A\_2, A_3A\_3, ⋯\cdots, A_NA\_N이 공백으로 구분되어 주어진다.

출력

첫 번째 줄에 높이가 정확히 HH가 되도록 컵을 포개는 경우의 수를 1,000,000,0071\\,000\\,000\\,007(=109+7= 10^9+7)로 나눈 나머지를 출력한다.

제한

  • 1≤N≤1001 \le N \le 100
  • 1≤H≤100,0001 \le H \le 100\\,000, HH는 정수
  • 1≤A_i≤1001 \le A\_i \le 100
  • 1≤i≤N1 \le i \le N

예제3

  1. 예제 1

    입력
    2 3
    1 2
    
    예상 출력
    3
    
  2. 예제 2

    입력
    4 10
    1 1 2 3
    
    예상 출력
    9003
    
  3. 예제 3

    입력
    2 100
    1 1
    
    예상 출력
    976371285