#include <bits/stdc++.h>
using namespace std;

using ll = long long;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int T;
    if (!(cin >> T)) return 0;

    while (T--) {
        int n;
        ll a, M;
        cin >> n >> a >> M;
        vector<ll> b(n);
        for (int i = 0; i < n; ++i) cin >> b[i];

        // Если a == 0, каждая вспышка всегда тратит 1 единицу заряда:
        // S(H) = n для любого H.
        // Тогда условие n < M либо выполняется, либо нет, независимо от H.
        if (a == 0) {
            // По-хорошему, тут надо вывести максимальный допустимый H по условию,
            // но чаще всего в таких задачах при a=0 либо любой H подходит,
            // либо вход так не дадут. Возьмем, например, H = 1.
            cout << 1 << '\n';
            continue;
        }

        // Бинарный поиск по H
        ll low = 1;
        ll high = (ll)1e18;   // достаточно большой верхний предел
        ll ans = 1;

        auto ok = [&](ll H) -> bool {
            // Проверяем, что n + 2*a*sum(min(H, b[i])) < M
            // Эквивалентно sum(min(H, b[i])) <= (M-1 - n) / (2*a)
            if (n >= M) return false; // даже без вспышек уже не хватает заряда

            ll denom = 2 * a;
            if (denom <= 0) return false; // на всякий случай

            ll numer = M - 1 - n;
            if (numer < 0) return false;  // точно не хватает заряда

            ll limitB = numer / denom;   // максимальное допустимое значение sumB

            ll sumB = 0;
            for (int i = 0; i < n; ++i) {
                ll val = b[i] < H ? b[i] : H;
                // если прибавление val уже перевалит за limitB — можно сразу выйти
                if (val > limitB - sumB) { // эквивалентно sumB + val > limitB, но без переполнения
                    return false;
                }
                sumB += val;
            }
            // Если суммарно не превысили limitB, то и полная стоимость < M
            return true;
        };

        while (low <= high) {
            ll mid = low + (high - low) / 2;
            if (ok(mid)) {
                ans = mid;
                low = mid + 1;   // пробуем увеличить H
            } else {
                high = mid - 1;  // слишком большой H
            }
        }

        cout << ans << '\n';
    }

    return 0;
}