#include <stdio.h>
#include <string.h>
#define MAX_M 10010
#define int long long
int Cnk(int n, int k)
{
int a = 1, b = 1;
for (int i = n; i > n - k; i--)
{
a *= i;
}
for (int i = 1; i <= k; i++)
{
b *= i;
}
return a / b;
}
signed main()
{
int n, m;
int input[1001];
int num[1001] = {0};
int max = -1;
scanf("%lld%lld", &n, &m);
for (int i = 1; i <= n; i++)
{
scanf("%lld", &input[i]);
num[input[i]]++;
if (input[i] > max)
max = input[i];
}
int dp[MAX_M] = {0};
dp[0] = 1;
for (int p = 1; p <= max; p++)
{
if (num[p] > 0)
{
int newdp[MAX_M] = {0};
for (int j = 0; j <= m; j++)
{
if (dp[j] != 0)
{
for (int k = 0; k <= num[p]; k++)
{
if (j + k * p <= m)
{
newdp[j + k * p] += dp[j] * Cnk(num[p], k);
}
else
{
break;
}
}
}
}
memcpy(dp, newdp, sizeof(dp));
}
}
printf("%lld", dp[m]);
return 0;
}