//Spoj --- Int. Przeprowadzka
#include <iostream>
using namespace std;
int main()
{
long long ILOSC_TESTOW = 0, ilExponatow, MaxWaga_w_Pudelku, MIN_Ilosc_Pudelek(0);
cin>>ILOSC_TESTOW;
while(ILOSC_TESTOW!=0)
{
cin>>ilExponatow>>MaxWaga_w_Pudelku;
int* WagiExpon = new int[ilExponatow];
int* Tymczasowa_Zmienna_0 = new int[3];
Tymczasowa_Zmienna_0[0] = 0;
Tymczasowa_Zmienna_0[1] = 0;
Tymczasowa_Zmienna_0[2] = 0;
//Zapelnienie tablicy wartosci wag eksponatow
for (int i = 0; i<ilExponatow; i++)
{
cin>>WagiExpon[i];
}
//Wyszukiwanie maksymalnej wagi rownej max pojemnosci pude³ka
if(MaxWaga_w_Pudelku!=0)
{
for (int j = 0; j<ilExponatow; j++)
{
if(WagiExpon[j] == MaxWaga_w_Pudelku)
{
MIN_Ilosc_Pudelek++;
WagiExpon[j] = 0;
}
}
}
else
MIN_Ilosc_Pudelek = 0;
unsigned short A(ilExponatow-1);
while(A!=0)
{
for (int j = 0; j<(ilExponatow-1); j++)
{
for(int k = j+1; k<ilExponatow; k++)
{
if(Tymczasowa_Zmienna_0[0]<(WagiExpon[j]+ WagiExpon[k]) && (WagiExpon[j]+ WagiExpon[k])<=MaxWaga_w_Pudelku)
{
Tymczasowa_Zmienna_0[0] = WagiExpon[j] + WagiExpon[k];
Tymczasowa_Zmienna_0[1] = j;
Tymczasowa_Zmienna_0[2] = k;
}
}
}
WagiExpon[Tymczasowa_Zmienna_0[1]] = 0;
WagiExpon[Tymczasowa_Zmienna_0[2]] = 0;
if(Tymczasowa_Zmienna_0[0] != 0)
{
MIN_Ilosc_Pudelek++;
}
else break;
Tymczasowa_Zmienna_0[0] = 0;
A--;
}
cout << MIN_Ilosc_Pudelek << endl;
MIN_Ilosc_Pudelek = 0;
delete [] WagiExpon;
delete [] Tymczasowa_Zmienna_0;
--ILOSC_TESTOW;
}
return 0;
}