#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("inline")
#include<bits/stdc++.h>
using namespace std;
template < class T> struct cLtraits_identity{
using type = T;
}
;
template < class T> using cLtraits_try_make_signed =
typename conditional<
is_integral< T> :: value ,
make_signed< T> ,
cLtraits_identity< T>
> :: type ;
template < class S, class T> struct cLtraits_common_type{
using tS = typename cLtraits_try_make_signed< S> :: type ;
using tT = typename cLtraits_try_make_signed< T> :: type ;
using type = typename common_type< tS,tT> :: type ;
}
;
template < class S, class T> inline auto min_L( S a, T b)
- > typename cLtraits_common_type< S,T> :: type {
return ( typename cLtraits_common_type< S,T> :: type ) a <= ( typename cLtraits_common_type< S,T> :: type ) b ? a : b;
}
template < class S, class T> inline S chmax( S & a, T b) {
if ( a< b) {
a= b;
}
return a;
}
#define main dummy_main
int main( ) {
return 0 ;
}
#undef main
class Solution{
public :
long long maximumBeauty( vector< int > & A, long long M, int T, int X, int Y) {
static long long hist[ 1000000 ] ;
static long long ned[ 1000000 ] ;
long long i;
long long k;
long long m;
long long res;
int N = A.size ( ) ;
for ( i= ( 0 ) ; i< ( T+ 1 ) ; i++ ) {
hist[ i] = 0 ;
}
for ( i= ( 0 ) ; i< ( N) ; i++ ) {
hist[ min_L( A[ i] , T) ] ++ ;
}
k = ned[ 0 ] = 0 ;
for ( i= ( T+ 1 ) - 1 ; i>= ( 0 ) ; i-- ) {
int YGwFZBGH;
for ( YGwFZBGH= ( 0 ) ; YGwFZBGH< ( hist[ i] ) ; YGwFZBGH++ ) {
ned[ k+ 1 ] = ned[ k] + ( T - i) ;
k++ ;
}
}
k = 0 ;
while ( k+ 1 <= N && ned[ k+ 1 ] <= M) {
k++ ;
}
res = k * X;
if ( ned[ N] == 0 ) {
return res;
}
for ( i= ( 1 ) ; i< ( T) ; i++ ) {
M - = hist[ i- 1 ] ;
hist[ i] + = hist[ i- 1 ] ;
hist[ i- 1 ] = 0 ;
if ( M < 0 ) {
break ;
}
if ( k == N) {
k-- ;
}
for ( ;; ) {
m = min_L( N- hist[ i] , k) ;
if ( ned[ m] + ( T- i) * ( k- m) <= M) {
break ;
}
k-- ;
}
chmax( res, k * X + i * Y) ;
}
return res;
}
}
;
// cLay version 20220312-1
// --- original code ---
// #define main dummy_main
// {}
// #undef main
//
// class Solution {
// public:
// ll maximumBeauty(VI& A, ll M, int T, int X, int Y) {
// static ll hist[1d6], ned[1d6];
// ll i, k, m, res; int N = A.size();
//
// rep(i,T+1) hist[i] = 0;
// rep(i,N) hist[min(A[i],T)]++;
//
// k = ned[0] = 0;
// rrep(i,T+1) rep(hist[i]) ned[k+1] = ned[k] + (T - i), k++;
//
// k = 0;
// while(k+1 <= N && ned[k+1] <= M) k++;
// res = k * X;
// if(ned[N]==0) return res;
//
// rep(i,1,T){
// M -= hist[i-1];
// hist[i] += hist[i-1]; hist[i-1] = 0;
// if(M < 0) break;
// if(k == N) k--;
// for(;;){
// m = min(N-hist[i], k);
// if(ned[m] + (T-i) * (k-m) <= M) break;
// k--;
// }
// res >?= k * X + i * Y;
// }
//
// return res;
// }
// };
I3ByYWdtYSBHQ0Mgb3B0aW1pemUoIk9mYXN0IikKI3ByYWdtYSBHQ0Mgb3B0aW1pemUoInVucm9sbC1sb29wcyIpCiNwcmFnbWEgR0NDIG9wdGltaXplKCJpbmxpbmUiKQojaW5jbHVkZTxiaXRzL3N0ZGMrKy5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwp0ZW1wbGF0ZTxjbGFzcyBUPiBzdHJ1Y3QgY0x0cmFpdHNfaWRlbnRpdHl7CiAgdXNpbmcgdHlwZSA9IFQ7Cn0KOwp0ZW1wbGF0ZTxjbGFzcyBUPiB1c2luZyBjTHRyYWl0c190cnlfbWFrZV9zaWduZWQgPQogIHR5cGVuYW1lIGNvbmRpdGlvbmFsPAogICAgaXNfaW50ZWdyYWw8VD46OnZhbHVlLAogICAgbWFrZV9zaWduZWQ8VD4sCiAgICBjTHRyYWl0c19pZGVudGl0eTxUPgogICAgPjo6dHlwZTsKdGVtcGxhdGUgPGNsYXNzIFMsIGNsYXNzIFQ+IHN0cnVjdCBjTHRyYWl0c19jb21tb25fdHlwZXsKICB1c2luZyB0UyA9IHR5cGVuYW1lIGNMdHJhaXRzX3RyeV9tYWtlX3NpZ25lZDxTPjo6dHlwZTsKICB1c2luZyB0VCA9IHR5cGVuYW1lIGNMdHJhaXRzX3RyeV9tYWtlX3NpZ25lZDxUPjo6dHlwZTsKICB1c2luZyB0eXBlID0gdHlwZW5hbWUgY29tbW9uX3R5cGU8dFMsdFQ+Ojp0eXBlOwp9CjsKdGVtcGxhdGU8Y2xhc3MgUywgY2xhc3MgVD4gaW5saW5lIGF1dG8gbWluX0woUyBhLCBUIGIpCi0+IHR5cGVuYW1lIGNMdHJhaXRzX2NvbW1vbl90eXBlPFMsVD46OnR5cGV7CiAgcmV0dXJuICh0eXBlbmFtZSBjTHRyYWl0c19jb21tb25fdHlwZTxTLFQ+Ojp0eXBlKSBhIDw9ICh0eXBlbmFtZSBjTHRyYWl0c19jb21tb25fdHlwZTxTLFQ+Ojp0eXBlKSBiID8gYSA6IGI7Cn0KdGVtcGxhdGU8Y2xhc3MgUywgY2xhc3MgVD4gaW5saW5lIFMgY2htYXgoUyAmYSwgVCBiKXsKICBpZihhPGIpewogICAgYT1iOwogIH0KICByZXR1cm4gYTsKfQojZGVmaW5lIG1haW4gZHVtbXlfbWFpbgppbnQgbWFpbigpewogIHJldHVybiAwOwp9CiN1bmRlZiBtYWluCmNsYXNzIFNvbHV0aW9uewogIHB1YmxpYzoKICBsb25nIGxvbmcgbWF4aW11bUJlYXV0eSh2ZWN0b3I8aW50PiYgQSwgbG9uZyBsb25nIE0sIGludCBULCBpbnQgWCwgaW50IFkpewogICAgc3RhdGljIGxvbmcgbG9uZyBoaXN0WzEwMDAwMDBdOwogICAgc3RhdGljIGxvbmcgbG9uZyBuZWRbMTAwMDAwMF07CiAgICBsb25nIGxvbmcgaTsKICAgIGxvbmcgbG9uZyBrOwogICAgbG9uZyBsb25nIG07CiAgICBsb25nIGxvbmcgcmVzOwogICAgaW50IE4gPSBBLnNpemUoKTsKICAgIGZvcihpPSgwKTtpPChUKzEpO2krKyl7CiAgICAgIGhpc3RbaV0gPSAwOwogICAgfQogICAgZm9yKGk9KDApO2k8KE4pO2krKyl7CiAgICAgIGhpc3RbbWluX0woQVtpXSwgVCldKys7CiAgICB9CiAgICBrID0gbmVkWzBdID0gMDsKICAgIGZvcihpPShUKzEpLTE7aT49KDApO2ktLSl7CiAgICAgIGludCBZR3dGWkJHSDsKICAgICAgZm9yKFlHd0ZaQkdIPSgwKTtZR3dGWkJHSDwoaGlzdFtpXSk7WUd3RlpCR0grKyl7CiAgICAgICAgbmVkW2srMV0gPSBuZWRba10gKyAoVCAtIGkpOwogICAgICAgIGsrKzsKICAgICAgfQogICAgfQogICAgayA9IDA7CiAgICB3aGlsZShrKzEgPD0gTiAmJiBuZWRbaysxXSA8PSBNKXsKICAgICAgaysrOwogICAgfQogICAgcmVzID0gayAqIFg7CiAgICBpZihuZWRbTl09PTApewogICAgICByZXR1cm4gcmVzOwogICAgfQogICAgZm9yKGk9KDEpO2k8KFQpO2krKyl7CiAgICAgIE0gLT0gaGlzdFtpLTFdOwogICAgICBoaXN0W2ldICs9IGhpc3RbaS0xXTsKICAgICAgaGlzdFtpLTFdID0gMDsKICAgICAgaWYoTSA8IDApewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGlmKGsgPT0gTil7CiAgICAgICAgay0tOwogICAgICB9CiAgICAgIGZvcig7Oyl7CiAgICAgICAgbSA9bWluX0woTi1oaXN0W2ldLCBrKTsKICAgICAgICBpZihuZWRbbV0gKyAoVC1pKSAqIChrLW0pIDw9IE0pewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGstLTsKICAgICAgfQogICAgICBjaG1heChyZXMsIGsgKiBYICsgaSAqIFkpOwogICAgfQogICAgcmV0dXJuIHJlczsKICB9Cn0KOwovLyBjTGF5IHZlcnNpb24gMjAyMjAzMTItMQoKLy8gLS0tIG9yaWdpbmFsIGNvZGUgLS0tCi8vICNkZWZpbmUgbWFpbiBkdW1teV9tYWluCi8vIHt9Ci8vICN1bmRlZiBtYWluCi8vIAovLyBjbGFzcyBTb2x1dGlvbiB7Ci8vIHB1YmxpYzoKLy8gICBsbCBtYXhpbXVtQmVhdXR5KFZJJiBBLCBsbCBNLCBpbnQgVCwgaW50IFgsIGludCBZKSB7Ci8vICAgICBzdGF0aWMgbGwgaGlzdFsxZDZdLCBuZWRbMWQ2XTsKLy8gICAgIGxsIGksIGssIG0sIHJlczsgaW50IE4gPSBBLnNpemUoKTsKLy8gCi8vICAgICByZXAoaSxUKzEpIGhpc3RbaV0gPSAwOwovLyAgICAgcmVwKGksTikgaGlzdFttaW4oQVtpXSxUKV0rKzsKLy8gCi8vICAgICBrID0gbmVkWzBdID0gMDsKLy8gICAgIHJyZXAoaSxUKzEpIHJlcChoaXN0W2ldKSBuZWRbaysxXSA9IG5lZFtrXSArIChUIC0gaSksIGsrKzsKLy8gCi8vICAgICBrID0gMDsKLy8gICAgIHdoaWxlKGsrMSA8PSBOICYmIG5lZFtrKzFdIDw9IE0pIGsrKzsKLy8gICAgIHJlcyA9IGsgKiBYOwovLyAgICAgaWYobmVkW05dPT0wKSByZXR1cm4gcmVzOwovLyAKLy8gICAgIHJlcChpLDEsVCl7Ci8vICAgICAgIE0gLT0gaGlzdFtpLTFdOwovLyAgICAgICBoaXN0W2ldICs9IGhpc3RbaS0xXTsgaGlzdFtpLTFdID0gMDsKLy8gICAgICAgaWYoTSA8IDApIGJyZWFrOwovLyAgICAgICBpZihrID09IE4pIGstLTsKLy8gICAgICAgZm9yKDs7KXsKLy8gICAgICAgICBtID0gbWluKE4taGlzdFtpXSwgayk7Ci8vICAgICAgICAgaWYobmVkW21dICsgKFQtaSkgKiAoay1tKSA8PSBNKSBicmVhazsKLy8gICAgICAgICBrLS07Ci8vICAgICAgIH0KLy8gICAgICAgcmVzID4/PSBrICogWCArIGkgKiBZOwovLyAgICAgfQovLyAKLy8gICAgIHJldHVybiByZXM7Ci8vICAgfQovLyB9Owo=