rt.
AC 23 WA 20
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,m,k,s[200005],ans[200005];
struct node{
int val,pos;
}a[200005];
bool cmp(node a,node b){return a.val>b.val;}
bool check1(int x,int y,int l,int z){//到哪一位,他的选票
if(x>=z){
int t=s[x]-a[z].val;
if((y+1ll)*(x-1ll)-t<=l) return true;
else return false;
}else{
int t=s[x];
if((y+1ll)*x-t<=l) return true;
else return false;
}
}
bool check(int x,int y,int z){//ta的选票,还剩下的选票,他是哪一位
int l=1,r=n;
while(r-l>5){
int mid=(l+r)>>1ll;
if(check1(mid,x,y,z)) l=mid;
else r=mid;
}
//cout<<x<<" "<<y<<" "<<z<<endl;
for(int i=r;i>=l;i--)
if(check1(i,x,y,z)){/*cout<<"_)_"<<i<<" "<<x<<" "<<y<<" "<<z<<" "<<check1(i,x,y,z)<<endl;*/return(i>=z?i<=m:i<=m-1);}
return true;
}
signed main(){
cin>>n>>m>>k;
for(int i=1;i<=n;i++) cin>>a[i].val,k-=a[i].val,a[i].pos=i;
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++) s[i]=s[i-1]+a[i].val;
for(int i=1;i<=n;i++){
int l=0,r=k,flag=0;
while(r-l>5){
int mid=(l+r)>>1ll;
if(check(a[i].val+mid,k-mid,i)) r=mid;
else l=mid;
}
for(int j=l;j<=r;j++)
if(check(a[i].val+j,k-j,i)){ans[a[i].pos]=j;flag=1;break;}
if(!flag) ans[a[i].pos]=-1;
}
for(int i=1;i<=n;i++) cout<<ans[i]<<" ";
}