#include<bits/stdc++.h>
using namespace std;
void solve()
{
int n, p;
cin >> n >> p;
vector <int> a(n), ans(n);
for(int & x : a)
cin >> x;
sort(a.begin(), a.end());
reverse(a.begin(), a.end());
vector <long long> sum(n);
sum[0] = a[0];
for(int i = 1; i < n; ++i)
sum[i] = a[i] + sum[i - 1];
int minD = lower_bound(sum.begin(), sum.end(), p) - sum.begin();
for(int i = 0; i < n; ++i)
if(i < n / 2 + n % 2)
{
if(a[0] >= p)
ans[i] = n;
else
{
if(i + minD >= n)
ans[i] = 0;
else
ans[i] = n - (i + minD);
}
}else
ans[i] = ans[n - 1 - i];
int K = p - a[0];
if(K > 0)
{
int goodAns = -1;
if(a[1] >= K)
{
int sum = 0;
for(int i = 2; i < n; ++i)
{
sum += a[i];
if(sum >= K)
{
goodAns = i + 1;
break;
}
}
}else
{
bool dp[K * 4] = {1};
int sum = 0;
for(int i = 1; i < n;)
{
int j;
for(j = i; j < n && a[i] == a[j]; ++j);
int len = j - i;
for(int pos = 0; pos < K * 4; ++pos)
if(dp[pos])
{
int need1 = K - pos;
int need2 = K - (sum - pos);
if(need1 <= 0)
need1 = 0;
else
need1 = need1 / a[i] + (need1 % a[i] ? 1 : 0);
if(need2 <= 0)
need2 = 0;
else
need2 = need2 / a[i] + (need2 % a[i] ? 1 : 0);
if(need1 + need2 <= len)
{
int newV = need1 + need2 + (i - 1) + 1;
goodAns = (goodAns == -1 ? newV : min(goodAns, newV));
}
}
if(goodAns != -1)
break;
for(int step = 0; step < len; ++step)
{
sum += a[i];
for(int pos = sum - a[i]; pos >= 0; --pos)
if(dp[pos])
dp[pos + a[i]] = true;
}
i = j;
}
}
if(goodAns != -1)
{
goodAns = n - goodAns + 2;
for(int i = 0; i < n / 2 + n % 2; ++i)
if(ans[i] < goodAns)
ans[i] = ans[n - 1 - i] = goodAns;
}
}
for(int x : ans)
cout << x << ' ';
cout << '\n';
}
int main()
{
// freopen("input.txt", "r", stdin);
ios_base :: sync_with_stdio(false);
cin.tie(NULL);
int t;
cin >> t;
while(t--)
solve();
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnZvaWQgc29sdmUoKQp7CiAgICBpbnQgbiwgcDsKICAgIGNpbiA+PiBuID4+IHA7CgogICAgdmVjdG9yIDxpbnQ+IGEobiksIGFucyhuKTsKCiAgICBmb3IoaW50ICYgeCA6IGEpCiAgICAgICAgY2luID4+IHg7CgogICAgc29ydChhLmJlZ2luKCksIGEuZW5kKCkpOwogICAgcmV2ZXJzZShhLmJlZ2luKCksIGEuZW5kKCkpOwoKICAgIHZlY3RvciA8bG9uZyBsb25nPiBzdW0obik7CgogICAgc3VtWzBdID0gYVswXTsKICAgIGZvcihpbnQgaSA9IDE7IGkgPCBuOyArK2kpCiAgICAgICAgc3VtW2ldID0gYVtpXSArIHN1bVtpIC0gMV07CgogICAgaW50IG1pbkQgPSBsb3dlcl9ib3VuZChzdW0uYmVnaW4oKSwgc3VtLmVuZCgpLCBwKSAtIHN1bS5iZWdpbigpOwoKICAgIGZvcihpbnQgaSA9IDA7IGkgPCBuOyArK2kpCiAgICAgICAgaWYoaSA8IG4gLyAyICsgbiAlIDIpCiAgICAgICAgewogICAgICAgICAgICBpZihhWzBdID49IHApCiAgICAgICAgICAgICAgICBhbnNbaV0gPSBuOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlmKGkgKyBtaW5EID49IG4pCiAgICAgICAgICAgICAgICAgICAgYW5zW2ldID0gMDsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBhbnNbaV0gPSBuIC0gKGkgKyBtaW5EKTsKICAgICAgICAgICAgfQogICAgICAgIH1lbHNlCiAgICAgICAgICAgIGFuc1tpXSA9IGFuc1tuIC0gMSAtIGldOwoKICAgIGludCBLID0gcCAtIGFbMF07CgogICAgaWYoSyA+IDApCiAgICB7CiAgICAgICAgaW50IGdvb2RBbnMgPSAtMTsKCiAgICAgICAgaWYoYVsxXSA+PSBLKQogICAgICAgIHsKICAgICAgICAgICAgaW50IHN1bSA9IDA7CiAgICAgICAgICAgIGZvcihpbnQgaSA9IDI7IGkgPCBuOyArK2kpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHN1bSArPSBhW2ldOwogICAgICAgICAgICAgICAgaWYoc3VtID49IEspCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgZ29vZEFucyA9IGkgKyAxOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfWVsc2UKICAgICAgICB7CiAgICAgICAgICAgIGJvb2wgZHBbSyAqIDRdID0gezF9OwoKICAgICAgICAgICAgaW50IHN1bSA9IDA7CgogICAgICAgICAgICBmb3IoaW50IGkgPSAxOyBpIDwgbjspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGludCBqOwogICAgICAgICAgICAgICAgZm9yKGogPSBpOyBqIDwgbiAmJiBhW2ldID09IGFbal07ICsraik7CgogICAgICAgICAgICAgICAgaW50IGxlbiA9IGogLSBpOwoKICAgICAgICAgICAgICAgIGZvcihpbnQgcG9zID0gMDsgcG9zIDwgSyAqIDQ7ICsrcG9zKQogICAgICAgICAgICAgICAgICAgIGlmKGRwW3Bvc10pCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBpbnQgbmVlZDEgPSBLIC0gcG9zOwogICAgICAgICAgICAgICAgICAgICAgICBpbnQgbmVlZDIgPSBLIC0gKHN1bSAtIHBvcyk7CgoKICAgICAgICAgICAgICAgICAgICAgICAgaWYobmVlZDEgPD0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lZWQxID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVlZDEgPSBuZWVkMSAvIGFbaV0gKyAobmVlZDEgJSBhW2ldID8gMSA6IDApOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYobmVlZDIgPD0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lZWQyID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVlZDIgPSBuZWVkMiAvIGFbaV0gKyAobmVlZDIgJSBhW2ldID8gMSA6IDApOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYobmVlZDEgKyBuZWVkMiA8PSBsZW4pCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuZXdWID0gbmVlZDEgKyBuZWVkMiArIChpIC0gMSkgKyAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29vZEFucyA9IChnb29kQW5zID09IC0xID8gbmV3ViA6IG1pbihnb29kQW5zLCBuZXdWKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYoZ29vZEFucyAhPSAtMSkKICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBmb3IoaW50IHN0ZXAgPSAwOyBzdGVwIDwgbGVuOyArK3N0ZXApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgc3VtICs9IGFbaV07CgogICAgICAgICAgICAgICAgICAgIGZvcihpbnQgcG9zID0gc3VtIC0gYVtpXTsgcG9zID49IDA7IC0tcG9zKQogICAgICAgICAgICAgICAgICAgICAgICBpZihkcFtwb3NdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZHBbcG9zICsgYVtpXV0gPSB0cnVlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGkgPSBqOwogICAgICAgICAgICB9CiAgICAgICAgfQoKCiAgICAgICAgaWYoZ29vZEFucyAhPSAtMSkKICAgICAgICB7CiAgICAgICAgICAgIGdvb2RBbnMgPSBuIC0gZ29vZEFucyArIDI7CiAgICAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBuIC8gMiArIG4gJSAyOyArK2kpCiAgICAgICAgICAgICAgICBpZihhbnNbaV0gPCBnb29kQW5zKQogICAgICAgICAgICAgICAgICAgIGFuc1tpXSA9IGFuc1tuIC0gMSAtIGldID0gZ29vZEFuczsKICAgICAgICB9CiAgICB9CgogICAgZm9yKGludCB4IDogYW5zKQogICAgICAgIGNvdXQgPDwgeCA8PCAnICc7CiAgICBjb3V0IDw8ICdcbic7Cn0KCmludCBtYWluKCkKewovLyAgICBmcmVvcGVuKCJpbnB1dC50eHQiLCAiciIsIHN0ZGluKTsKICAgIGlvc19iYXNlIDo6IHN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKE5VTEwpOwoKICAgIGludCB0OwogICAgY2luID4+IHQ7CgogICAgd2hpbGUodC0tKQogICAgICAgIHNvbHZlKCk7CgogICAgcmV0dXJuIDA7Cn0=