use std::collections::BinaryHeap; fn main() { let mut nabxy = String::new(); std::io::stdin().read_line(&mut nabxy).ok(); let nabxy: Vec = nabxy.trim().split_whitespace().map(|s| s.parse().unwrap()).collect(); let n = nabxy[0]; let a = nabxy[1]; let b = nabxy[2]; let x = nabxy[3]; let y = nabxy[4]; let mut h = String::new(); std::io::stdin().read_line(&mut h).ok(); let h: Vec = h.trim().split_whitespace().map(|s| s.parse().unwrap()).collect(); let mut upper = 1usize << 60; let mut lower = 0usize; while upper > lower { let middle = (upper + lower) / 2; let h = h.iter().map(|&v| if v > middle { v - middle } else { 0 }).collect::>(); let mut pque = BinaryHeap::new(); for &v in h.iter() { if v > 0 { pque.push(v); }} let mut cnt = 0usize; while cnt < a && !pque.is_empty() { cnt += 1; let val = pque.pop().unwrap(); if val > x { pque.push(val - x); } } let summary = pque.iter().sum::(); let flg = b * y >= summary; if !flg { lower = middle + 1; } else { upper = middle; } } println!("{}", upper); }