#BK26092607. 拼搭积木方案

拼搭积木方案

题目描述

小禾有 nn 种积木,第 ii 种积木的长度为 aia_i。不同种类的积木长度互不相同,每种积木都有无限多块。

她想选出一些积木,使选出的积木长度之和恰好为 TT。请你计算一共有多少种选择方案。

一种方案由每种积木分别选了多少块决定,不考虑积木的排列顺序。例如,选一块长度为 22 的积木和一块长度为 33 的积木,无论摆放顺序如何,都只算一种方案。每种积木可以不选,也可以选多块。

由于方案数可能很大,请输出方案数对 10000000071000000007 取余后的结果。当 T=0T=0 时,一块积木也不选是一种方案。

输入格式

第一行两个整数 n,Tn,T,分别表示积木种类数和目标总长度。

第二行 nn 个整数 a1,a2,…,ana_1,a_2,\ldots,a_n,表示每种积木的长度。

输出格式

输出一行一个整数,表示符合要求的方案数对 10000000071000000007 取余后的结果。如果无法恰好凑出长度 TT,输出 00。

3 5
1 2 5
4
2 7
2 4
0
3 0
2 3 5
1

样例解释

样例 1 的四种方案分别为:五块长度 11;三块长度 11 和一块长度 22;一块长度 11 和两块长度 22;一块长度 55。

样例 2 中,两种积木的长度都是偶数,无法得到总长度 77。

样例 3 中,只有一块积木也不选这一种方案。

数据规模与约定

对于 100%100\% 的数据,1≤n≤1001\le n\le100,0≤T≤20000\le T\le2000,1≤ai≤20001\le a_i\le2000,且所有 aia_i 互不相同。

  • 子任务 1(30 分):保证 n≤12n\le12,T≤30T\le30。
  • 子任务 2(30 分):保证 n≤50n\le50,T≤500T\le500。
  • 子任务 3(40 分):没有特殊限制。