import math



def enough(n):

    whole_damage = B * n

    if (SUM > whole_damage*N + (A-B)*n):

        return False

    if (MAX <= whole_damage):

        return True

    arr = [hp for hp in HPS if hp > whole_damage]

    atk_times = 0

    for hp in arr:

        atk_times += int(math.ceil((hp - whole_damage)*1.0 / (A-B)))

        if atk_times > n:

            return False

    else:

        return True



N,A,B = list(map(int, input().split()))

HPS = [eval(input()) for i in range(N)]

MAX = max(HPS)

SUM = sum(HPS)



left = 1

right = MAX/B + 1

while left < right:

    mid = (left + right)/2

    if enough(mid):

        right = mid

    else:

        left = mid + 1

print(right)

N,A,B = list(map(int,input().split()))

src = [int(eval(input())) for i in range(N)]

src.sort(reverse=True)



def isok(n):

    if all(h <= n*B for h in src):

        return True

    m = 0

    for h in src:

        h -= n*B

        m += (h-1)//(A-B) + 1

        if m > n:

            return False

    return True



ok = 10**9

ng = 0

while ok-ng > 1:

    m = (ok+ng) // 2

    if isok(m):

        ok = m

    else:

        ng = m

print(ok)
import math


def enough(n):
    whole_damage = B * n
    if SUM > whole_damage * N + (A - B) * n:
        return False
    if MAX <= whole_damage:
        return True
    arr = [hp for hp in HPS if hp > whole_damage]
    atk_times = 0
    for hp in arr:
        atk_times += int(math.ceil((hp - whole_damage) * 1.0 / (A - B)))
        if atk_times > n:
            return False
    else:
        return True


N, A, B = list(map(int, input().split()))
HPS = [eval(input()) for i in range(N)]
MAX = max(HPS)
SUM = sum(HPS)
left = 1
right = MAX / B + 1
while left < right:
    mid = (left + right) / 2
    if enough(mid):
        right = mid
    else:
        left = mid + 1
print(right)

N, A, B = list(map(int, input().split()))
src = [int(eval(input())) for i in range(N)]
src.sort(reverse=True)


def isok(n):
    if all(h <= n * B for h in src):
        return True
    m = 0
    for h in src:
        h -= n * B
        m += (h - 1) // (A - B) + 1
        if m > n:
            return False
    return True


ok = 10**9
ng = 0
while ok - ng > 1:
    m = (ok + ng) // 2
    if isok(m):
        ok = m
    else:
        ng = m
print(ok)

-import math +N, A, B = list(map(int, input().split())) +src = [int(eval(input())) for i in range(N)] +src.sort(reverse=True) -def enough(n): -    whole_damage = B * n -    if SUM > whole_damage * N + (A - B) * n: -        return False -    if MAX <= whole_damage: +def isok(n): +    if all(h <= n * B for h in src): -    arr = [hp for hp in HPS if hp > whole_damage] -    atk_times = 0 -    for hp in arr: -        atk_times += int(math.ceil((hp - whole_damage) * 1.0 / (A - B))) -        if atk_times > n: +    m = 0 +    for h in src: +        h -= n * B +        m += (h - 1) // (A - B) + 1 +        if m > n: -    else: -        return True +    return True -N, A, B = list(map(int, input().split())) -HPS = [eval(input()) for i in range(N)] -MAX = max(HPS) -SUM = sum(HPS) -left = 1 -right = MAX / B + 1 -while left < right: -    mid = (left + right) / 2 -    if enough(mid): -        right = mid +ok = 10**9 +ng = 0 +while ok - ng > 1: +    m = (ok + ng) // 2 +    if isok(m): +        ok = m -        left = mid + 1 -print(right) +        ng = m +print(ok)