꽃 장식하기

n가지 종류에서 종류별 한도 f_i를 지키며 정확히 s송이를 고르는 경우의 수를 1e9+7로 나눈 나머지로 구한다. n은 18 이하이고 s는 1e14까지 커질 수 있다.

어려움8조합론수학동적 계획법아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

성관이는 화단에 꽃을 심으려고 한다. 심을 꽃은 이미 nn종류를 준비해 두었고, ii번째 종류의 꽃은 fif_i송이 있다. 같은 종류의 꽃은 서로 구분할 수 없다.

성관이는 준비한 꽃 중에서 정확히 ss송이를 골라 화단에 심으려고 한다. 각 종류에서 고른 송이 수가 모두 같으면 같은 방법으로 센다. 꽃을 고르는 방법의 수가 매우 클 수 있으므로 109+710^9+7로 나눈 나머지를 구한다.

꽃을 고르는 방법의 수를 계산하는 프로그램을 작성하시오.

입력

첫째 줄에 nnss가 주어진다. (1n181 \le n \le 18, 1s10141 \le s \le 10^{14})

둘째 줄에 nn개의 정수 f1,f2,,fnf_1, f_2, \ldots, f_n이 주어진다. (0fi10120 \le f_i \le 10^{12})

출력

꽃을 고르는 방법의 수를 109+710^9+7로 나눈 나머지를 한 줄에 출력한다.

힌트

아래에서 괄호 안의 수는 각 종류에서 고른 송이 수다.

첫 번째 예제에서 고르는 방법은 (1,2)(1, 2)(0,3)(0, 3)의 2가지다.

두 번째 예제에서 고르는 방법은 (2,2)(2, 2)의 1가지다.

세 번째 예제에서 고르는 방법은 (1,2,2)(1, 2, 2), (0,3,2)(0, 3, 2), (1,3,1)(1, 3, 1)의 3가지다.