#include<bits/stdc++.h>
using namespace std;
#define endl '\n'//改变换行符格式;
#define rep(i,a,n) for(int i=a;i<=n;i++)//正向遍历数组;
#define per(i,n,a) for(int i=n;i>=a;i--)//反向遍历数组;
#define link(i,a,b,c) for(int i=a;i!=b;i=c)//遍历链表;
#define fi first //attetion-->pair<>s-->s.fi
#define se second //attetion-->pair<>s-->s.se
#define SZ(x) ((int)(x).size())//取数组大小;
#define SD(x) scanf("%d",&x)//输入;
#define SLD(x) scanf("%lld",&x)//输入;
#define SLF(x) scanf("%lf",&x)//输入;
#define PD(x) printf("%d",x)//输出;
#define PLD(x) printf("%lld",x)//输出;
#define PLF(x) printf("%lf",x)//输出;
typedef vector<int> VI;
typedef long long ll;
typedef pair<int, int> PII;
typedef pair<ll, ll> pii;
const ll mod = 998244353;
const ll inf = 0x3f3f3f3f;
ll Min(ll a, ll b) { return a > b ? b : a; }
ll Max(ll a, ll b) { return a > b ? a : b; }
ll Abs(ll x) { return x ? x : -x; }
ll binpow(ll a, ll b) { ll res = 1; a %= mod; while (b > 0) { if (b & 1)res = res * a % mod; a = a * a % mod; b >>= 1; }return res; }
ll inv(ll x) { return binpow(x, mod - 2); }
ll gcd(ll a, ll b) { return b ? gcd(b, a % b) : a; }
ll lcm(ll a, ll b) { return a * (b / gcd(a, b)); }
ll lowbit(ll x) {return x & (-x);}
const double PI = acos(-1);
const int inf_max = 0x3f3f3f3f;
const int inf_min = ~0x3f3f3f3f;
const ll inf_max_ll = 0x3f3f3f3f3f3f3f3f;
const ll inf_min_ll = ~0x3f3f3f3f3f3f3f3f;
const int N=1e4+10;
int main(){
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
ll n,a,b;
cin>>n>>a>>b;
vector<ll> vec(n);
rep(i,1,n)cin>>vec[i];
ll ok=1,ng=1e10;
while(abs(ok-ng)>1){
ll mid=(ok+ng)/2;
ll cnta=0,cntb=0;
rep(i,1,n){
if(vec[i]<mid){
cnta+=(mid-vec[i]-1)/a+1;
}
else{
cntb+=(vec[i]-mid)/b;
}
}
if(cnta<=cntb){
ok=mid;
}
else {
ng=mid;
}
}
cout<<ok;
return 0;
}
https://atcoder.jp/contests/arc144/tasks/arc144_b
附上原题链接OvO