n가지 종류에서 종류별 한도 f_i를 지키며 정확히 s송이를 고르는 경우의 수를 1e9+7로 나눈 나머지로 구한다. n은 18 이하이고 s는 1e14까지 커질 수 있다.
성관이는 화단에 꽃을 심으려고 한다. 심을 꽃은 이미 nnn종류를 준비해 두었고, iii번째 종류의 꽃은 fif_ifi송이 있다. 같은 종류의 꽃은 서로 구분할 수 없다.
성관이는 준비한 꽃 중에서 정확히 sss송이를 골라 화단에 심으려고 한다. 각 종류에서 고른 송이 수가 모두 같으면 같은 방법으로 센다. 꽃을 고르는 방법의 수가 매우 클 수 있으므로 109+710^9+7109+7로 나눈 나머지를 구한다.
꽃을 고르는 방법의 수를 계산하는 프로그램을 작성하시오.
첫째 줄에 nnn과 sss가 주어진다. (1≤n≤181 \le n \le 181≤n≤18, 1≤s≤10141 \le s \le 10^{14}1≤s≤1014)
둘째 줄에 nnn개의 정수 f1,f2,…,fnf_1, f_2, \ldots, f_nf1,f2,…,fn이 주어진다. (0≤fi≤10120 \le f_i \le 10^{12}0≤fi≤1012)
꽃을 고르는 방법의 수를 109+710^9+7109+7로 나눈 나머지를 한 줄에 출력한다.
아래에서 괄호 안의 수는 각 종류에서 고른 송이 수다.
첫 번째 예제에서 고르는 방법은 (1,2)(1, 2)(1,2)와 (0,3)(0, 3)(0,3)의 2가지다.
두 번째 예제에서 고르는 방법은 (2,2)(2, 2)(2,2)의 1가지다.
세 번째 예제에서 고르는 방법은 (1,2,2)(1, 2, 2)(1,2,2), (0,3,2)(0, 3, 2)(0,3,2), (1,3,1)(1, 3, 1)(1,3,1)의 3가지다.