나의 친구들은 작다
시간 제한8초메모리 제한512 MB
무게 한도 W 아래에서 더 이상 넣을 수 있는 친구가 없을 때까지 임의의 순서로 하나씩 담을 때, 최종적으로 배낭에 담길 수 있는 친구 조합의 수를 구한다.
문제
나에게는 친구가 아주 많다. 그중 어느 친구도 몹시 작다.
나는 친구들과 자주 나들이를 나선다. 몇몇 친구를 배낭에 넣고 함께 나선다.
나는 매일 아침 그날 함께 나갈 친구를 정한다. 빈 배낭에 친구를 한 명씩 넣는다.
나는 힘이 그다지 세지 않다. 그래서 동시에 들고 다닐 수 있는 친구 무게에는 한계가 있다.
나는 무게 한계를 넘지 않도록 친구를 넣는다. 어떤 순서로 넣을지는 기분에 달려 있다.
나는 넣을 수 있는 친구가 아직 남아 있는 한 넣기를 멈추지 않는다. 결코 멈추지 않는다.
…… 그런데, 배낭에 들어간 친구의 조합은 모두 몇 가지나 될까?
입력
N W
w1
w2
.
.
.
wn
입력의 첫째 줄에는 정수 N (1 ≤ N ≤ 200)과 정수 W (1 ≤ W ≤ 10,000)가 이 순서대로 공백으로 구분되어 적혀 있다. 정수 N 은 친구의 수를, 정수 W 는 동시에 들고 다닐 수 있는 무게 한계를 나타낸다. 무게의 합이 W 보다 크면 들고 다닐 수 없다.
이어지는 N 줄에는 친구의 무게를 나타내는 정수가 적혀 있다. 정수 wi (1 ≤ wi ≤ 10,000)가 i 번째 친구의 무게를 나타낸다.
출력
최종적으로 배낭에 들어 있는 친구의 조합은 몇 가지인지 구하라. 그 총수를 1,000,000,007로 나눈 나머지를 출력하라. 1,000,000,007은 소수이다.
아무도 배낭에 들어 있지 않은 경우도 1가지로 센다는 점에 주의하라.