假设可以组成10套牌,然后根据我们手里的牌开始组合,如果我们手里有1 2 3 joker这四种牌,要组成十套牌的话,我们用10减去1的数量,如果>0,则需要joker去补,同样,2,3也是这样。我们算一下joker需要补多少张,如果大于我们手里的joker
数量则组不成10套牌,如果>10就说明了至少有一组牌存在两张joker也不符合。组不成10套牌就寻找10以下的套牌数量,能组成的话就寻找10以上的(包括10)

#include <iostream>
using namespace std;
int n;
long long m;
const int maxn = 54;
long long arr[maxn];
bool judge(long long num) {
    long long ans=0;
    for (int i = 1; i <= n; i++) {
        if (arr[i] < num) {
            ans += (num - arr[i]);
        }
        if (ans>num||ans>m)return false;
    }
    return true;
}
long long find(long long l, long long r) {
    while (l < r) {
        long long mid = l+(r-l+1)/2;
        if (judge(mid))l = mid;
        else r = mid - 1;
    }
    return l;
}
int main()
{
    scanf("%d%lld",&n,&m);
    for (int i = 1; i <= n; i++) {
        cin >> arr[i];
    }
   cout<< find(1, 0x3f3f3f3f);
}