#include <bits/stdc++.h>
using namespace std;
#define int long long int
#define pb emplace_back
#define mp make_pair
#define fi first
#define se second
#define all(v) v.begin(), v.end()
#define ms(a,x) memset(a, x, sizeof(a));
#define mod 1000000007
int exp(int x,int y){int res=1;x=x%mod;while(y>0){if(y&1)res=(res*x)%mod;y=y>>1;x=(x*x)%mod;}return res;}
int modinv(int x){return exp(x,mod-2);}
int add(int a,int b){a%=mod,b%=mod;a=((a+b)%mod+mod)%mod;return a;}
int sub(int a,int b){a%=mod,b%=mod;a=((a-b)%mod+mod)%mod;return a;}
int mul(int a,int b){a%=mod,b%=mod;a=((a*b)%mod+mod)%mod;return a;}
int dp[1000009];
int solve(int n, int k, vector<int> &a)
{
if (k < 0)
return 0;
if (k == 0)
return 1;
if (dp[k] != -1)
return dp[k];
int ans = 0;
for (int i = 0; i < n; i++)
{
ans = add(ans, solve(n, k - a[i], a));
}
return dp[k] = ans % mod;
}
signed main()
{
int t = 1;
//cin>>t;
while (t--)
{
int n, i, x, k;
int h[100009] = {0};
ms(dp, -1);
cin >> n >> k;
vector<int> a(n, 0), v;
for (i = 0; i < n; i++)
cin >> a[i];
sort(all(a));
x = solve(n, k, a);
cout << x;
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgaW50IGxvbmcgbG9uZyBpbnQKI2RlZmluZSBwYiBlbXBsYWNlX2JhY2sKI2RlZmluZSBtcCBtYWtlX3BhaXIKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZAojZGVmaW5lIGFsbCh2KSB2LmJlZ2luKCksIHYuZW5kKCkKI2RlZmluZSBtcyhhLHgpICBtZW1zZXQoYSwgeCwgc2l6ZW9mKGEpKTsgICAgICAgICAgICAgICAgCiNkZWZpbmUgbW9kIDEwMDAwMDAwMDcKaW50IGV4cChpbnQgeCxpbnQgeSl7aW50IHJlcz0xO3g9eCVtb2Q7d2hpbGUoeT4wKXtpZih5JjEpcmVzPShyZXMqeCklbW9kO3k9eT4+MTt4PSh4KngpJW1vZDt9cmV0dXJuIHJlczt9CmludCBtb2RpbnYoaW50IHgpe3JldHVybiBleHAoeCxtb2QtMik7fQppbnQgYWRkKGludCBhLGludCBiKXthJT1tb2QsYiU9bW9kO2E9KChhK2IpJW1vZCttb2QpJW1vZDtyZXR1cm4gYTt9CmludCBzdWIoaW50IGEsaW50IGIpe2ElPW1vZCxiJT1tb2Q7YT0oKGEtYiklbW9kK21vZCklbW9kO3JldHVybiBhO30KaW50IG11bChpbnQgYSxpbnQgYil7YSU9bW9kLGIlPW1vZDthPSgoYSpiKSVtb2QrbW9kKSVtb2Q7cmV0dXJuIGE7fQoKaW50IGRwWzEwMDAwMDldOwppbnQgc29sdmUoaW50IG4sIGludCBrLCB2ZWN0b3I8aW50PiAmYSkKewogIGlmIChrIDwgMCkKICAgIHJldHVybiAwOwoKICBpZiAoayA9PSAwKQogICAgcmV0dXJuIDE7CgogIGlmIChkcFtrXSAhPSAtMSkKICAgIHJldHVybiBkcFtrXTsKCiAgaW50IGFucyA9IDA7CgogIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQogIHsKICAgIGFucyA9IGFkZChhbnMsIHNvbHZlKG4sIGsgLSBhW2ldLCBhKSk7CiAgfQoKICByZXR1cm4gZHBba10gPSBhbnMgJSBtb2Q7Cn0KCnNpZ25lZCBtYWluKCkKewoKCgogIGludCB0ID0gMTsKICAvL2Npbj4+dDsKICB3aGlsZSAodC0tKQogIHsKCiAgICBpbnQgbiwgaSwgeCwgazsKICAgIGludCBoWzEwMDAwOV0gPSB7MH07CiAgICBtcyhkcCwgLTEpOwoKICAgIGNpbiA+PiBuID4+IGs7CgoKICAgIHZlY3RvcjxpbnQ+IGEobiwgMCksIHY7CgogICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykKICAgICAgY2luID4+IGFbaV07CgogICAgc29ydChhbGwoYSkpOwoKICAgIHggPSBzb2x2ZShuLCBrLCBhKTsKCiAgICBjb3V0IDw8IHg7CiAgfQp9