#include <bits/stdc++.h>
using namespace std;
#define int long long
#define fr first
#define sc second
#define pb push_back
#define endl "\n"
#define all(x) x.begin(),x.end()
#define sp << " " <<
#define inf 1e18+1
#define N 20000
#define fast ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);cout<<fixed<<setprecision(0)
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
typedef tuple<int,int,int> tiii;
typedef pair<int,int> pii;
const int mod=1000000007;
int fac[N+5];
int fp(int x,int y){
int ans=1;
while(y){
if(y&1) ans=ans*x%mod;
x=x*x%mod;
y>>=1;
}
return ans;
}
void solve(){
fac[0]=1;
for(int i=1;i<N+5;i++)
fac[i]=fac[i-1]*i%mod;
int n,l;
cin >> n >> l;
int a[n],sum=0;
for(int i=0;i<n;i++){
cin >> a[i];
sum+=2*a[i]-1;
}
int ans=0;
for(int i=0;i<n;i++){
for(int j=i+1;j<n;j++){
int t=sum-2*(a[i]+a[j])+2;
for(int k=a[i]+a[j];k<=2*(a[i]+a[j])-2;k++){
if(k>l-t) break;
ans=(ans + fac[n-2+l-t-k]*fp(fac[l-t-k],mod-2)%mod*(min(2*a[i]-1,k-a[j])-max(a[i],k-2*a[j]+1)+1)*2)%mod;
}
}
}
if(n==1) ans=l;
cout << ans << endl;
}
int32_t main(){
fast;
int test=1;
//~ cin >> test;
while(test--) solve();
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |