11 背包
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
Special Judge, 64bit IO Format: %lld

题目描述

猫猫有 n 个物品,第 i 个物品的质量为 a_i,现在猫猫打算把它们全部装到背包里,可是他发现只有一大堆容量都为 m 的背包。


虽然猫猫很想用尽量少的背包装下所有物品,但这实在是太复杂了,导致他经常会错过最优解,于是他干脆摆烂了:


  • 猫猫会先准备 x 个空的背包,接下来他每次从所有未装入背包的物品中任意选一个然后放入任意一个尚能放下此物品的背包里,直到物品全部放入背包为止。


他想知道,最少要准备多少个背包,才能保证他无论如何操作,最终都能将所有物品放入背包内。


这个问题就交给你了!

输入描述:

每个测试点有多组测试数据。


第一行输入数据组数 T (1 \leq T \leq 100),表示有 T 组数据;


接下来对于每组测试数据,


第一行输入两个正整数 n,m (1 \leq n \leq 20, 1 \leq m \leq 10^9),分别表示物品的数量和背包的容量;


第二行输入 n 个正整数 a_1,a_2,...,a_n (1 \leq a_i \leq m),表示每个物品的大小。


保证每组测试数据中,n \geq 15 的数据点不超过 5 个。

输出描述:

对于每组测试数据,输出一个正整数 x,表示最少需要准备 x 个背包。

示例1

输入

复制
3
5 10
6 5 4 3 2
3 2
1 1 2
1 5
4

输出

复制
3
3
1

备注:

对于第一组测试样例,若只有两个背包,则猫猫可以:


  • 先把第一个物品放到第一个背包;


  • 再把第二个物品放到第二个背包;


  • 再把第三个物品放到第二个背包;


  • 再把第四个物品放到第一个背包;


  • 最后剩下第五个物品,无法放入任何一个背包。


可以证明,若猫猫有三个背包,则无论以何种顺序放入物品均能装下。