#line 2 "/home/defineprogram/Desktop/Library/template/template.cpp"
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define rep(i,n) for(ll i=0;i<n;i++)
#define REP(i,n) for(ll i=1;i<n;i++)
#define rev(i,n) for(ll i=n-1;i>=0;i--)
#define all(v) v.begin(),v.end()
#define P pair<ll,ll>
#define len(s) (ll)s.size()
 
template<class T,class U> inline bool chmin(T &a, U b){
	if(a>b){a=b;return true;}
	return false;
}
template<class T,class U> inline bool chmax(T &a, U b){
	if(a<b){a=b;return true;}
	return false;
}
constexpr ll inf = 3e18;
#line 2 "main.cpp"

int main(){
    cin.tie(0);ios::sync_with_stdio(false);
    ll S,p;cin>>S>>p;
    for(ll i=1;i*i<=p;i++){
        if(p%i)continue;
        ll j=p/i;
        if(i+j==S){
            cout<<"Yes\n";return 0;
        }
    }
    cout<<"No\n";
}

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int N=2e3+5;
const int mod=1e9+7;
int a[N];
ll sum;

ll power(ll a,ll b){
    ll ans=1;
    while(b){
        if(b&1){
            ans=ans*a%mod;
        }
        a=a*a%mod;
        b>>=1;
    }
    return ans%mod;
}

ll C(ll n,ll m){
    ll ans=1;
    n=min(n,m-n);
    for(int i=1;i<=n;i++){
        ll res=power(i,mod-2);
        ans=ans*res%mod;
    }
    for(ll i=m-n+1;i<=m;i++){
        ans=ans*i%mod;
    }
    return ans;
}

int main(){
    ll n,m;cin>>n>>m;
    for(ll i=0;i<n;i++){
        cin>>a[i];
        sum+=a[i];
    }
    if(sum>m){
        cout<<"0"<<endl;
    }
    else cout<<C(sum+n,n+m)%mod<<endl;
    return 0;
}

