https://www.acwing.com/problem/content/1111/
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n, m;
const int N = 1010;
int a[N];
int s[60][2];
int get_min(int i)
{
int ans = 0;
for(int k = i; k >= 0; k--)
{
ans += min(s[k][0], s[k][1]);
}
return ans;
}
signed main()
{
int T;
cin >> T;
for(int C = 1; C <= T; C++)
{
cin >> n >> m;
for(int i = 0; i < n; i++) cin >> a[i];
memset(s, 0, sizeof(s));
for(int i = 0; i < 50; i++)
{
for(int j = 0; j < n; j++)
{
if(a[j] >> i & 1)
{
s[i][0] += 1ll << i;
}
else
{
s[i][1] += 1ll << i;
}
}
}
int ans = 0, sum = 0;
if(get_min(49) > m) ans = -1;
else
{
for(int i = 49; i >= 0; i--)
{
if(sum + get_min(i - 1) + s[i][1] <= m)
{
ans += 1ll << i;
sum += s[i][1];
}
else
{
sum += s[i][0];
}
}
}
printf("Case #%lld: %lld\n", C, ans);
}
return 0;
}