#include using namespace std; #define overload3(_NULL, _1, _2, name, ...) name #define rep1(i, n) for (remove_const_t> i = 0; i < (n); i++) #define rep2(i, a, b) for (remove_const_t> i = (a); i < (b); i++) #define rep(...) overload3(__VA_ARGS__, rep2, rep1)(__VA_ARGS__) #if __has_include() # include #else # define dbg(...) (void(0)) #endif using i64 = long long; using usize = size_t; int main() { usize n; cin >> n; i64 a, b, x, y; cin >> a >> b >> x >> y; vector h(n); for (auto &&hi: h) cin >> hi; auto check = [&](i64 k) { priority_queue que{}; for (const auto &hi: h) que.push(max(hi - k, static_cast(0))); rep(i, a) { const auto t = que.top(); que.pop(); que.push(t - min(t, x)); } i64 sum = 0; while (not empty(que)) { sum += que.top(); que.pop(); } return sum <= y * b; }; i64 ok = numeric_limits::max() / 4, ng = numeric_limits::min() / 4; while (abs(ok - ng) > 1) { dbg(ok, ng); const auto mid = (ok + ng) / 2; (check(mid) ? ok : ng) = mid; } cout << max(ok, static_cast(0)) << endl; }