#include<bits/stdc++.h>
#define ll long long
#define r register
using namespace std;
inline int read(){
int x=0;
char ch=getchar();
while(!isdigit(ch)){
ch=getchar();
}
while(isdigit(ch)){
x*=10;
x+=ch-'0';
ch=getchar();
}
return x;
}
bool vis[15];
ll ans;
int n,m;
int a[15];
int aa[15],kk[15];
inline bool dfs(int pos,int pre,int pres,int prep,int sum){
if(pos==n+1){
if(sum==m){
ans++;
return true;
}
return false;
}
for(r int i=1;i<=n;i++){
if(vis[i])continue;
vis[i]=1;
aa[pos]=i;
for(r int k=max(pres+(i>pre?1:0),a[i]+prep);k<=m;k++){
int p=k-a[i];
kk[pos]=p;
if(dfs(pos+1,i,k,p,sum+p))break;
}
vis[i]=0;
}
}
int main(){
// freopen("ranklist.in","r",stdin);
// freopen("ranklist.out","w",stdout);
n=read(),m=read();
r int mx=0,flag;
for(r int i=1;i<=n;i++){
a[i]=read();
if(a[i]>mx){
flag=i;
mx=a[i];
}
}
dfs(1,flag,mx,0,0);
cout<<ans;
}