显示代码纯文本
#include<bits/stdc++.h>
#define int long long
using namespace std;
int s[100001];
bool ff(const long long a,const long long b){
return a>b;
}
signed main(){
freopen("Milk.in","r",stdin);
freopen("Milk.out","w",stdout);
int a,b,c,d;
long long f,g;
cin>>a>>b>>c>>d;
for(int v=1;v<=a;++v){
cin>>s[v];
}
sort(s+1,s+a+1,ff);
f=(long long)(c-d)*b;
s[0]=1145141919810;
for(int v=c;v;--v){
if((__int128)(s[v-1]-s[v])*(c-v+1)<=f){
while(s[c]+b<s[v-1]){
f=f-s[c]-b+s[v];
s[c]=s[c]+b;
--c;
}
f=f-(s[v-1]-s[v])*(c-v+1);
}
else{
g=f/(c-v+1);
if(s[v]+g>=s[c]+b){
f=f-s[c]-b+s[v];
s[c]=s[c]+b;
--c;
++v;
continue;
}
f=f%(c-v+1);
for(int var=v+1;var<=c;++var){
s[var]=s[v]+g;
}
s[v]=s[v]+g;
for(int var=v;f;++var,--f){
++s[var];
}
break;
}
}
f=0;
for(int v=1;v<=a;++v){
s[v]=s[v]%1000000007;
f=(f+s[v]*s[v])%1000000007;
}
cout<<f;
return 0;
}