露营的时间到了!去露营需要带各种各样的东西,然后还要随身携带,因此决定哪些物品对于成功露营是真正必不可少的非常重要。幸运的是,你的任务并非如此,因为需要打包的物品已经选好了。现在剩下的只是把它们装进背包里。
每个背包可以放入任意数量的物品,只要它们的总质量不超过背包的承重能力即可。物品不能分割,因此可能会出现所用背包的容量没有被完全利用的情况。
问题在于,目前还没有背包,需要购买它们。商店里有各种型号的背包。每个背包都有固定的承重能力,所有背包的价格相同。你的任务是购买足够的背包来装下所有露营物品,并使购买的背包数量最少。
输入格式
输入的第一行包含两个整数 $n$ 和 $m$ ($1 \le n \le 24, 1 \le m \le 100$),分别表示需要打包的物品数量和可供选择的背包数量。第二行包含一个由 $n$ 个整数组成的序列 $a_1, a_2, \dots, a_n$ ($1 \le a_i \le 10^8$),其中 $a_i$ 表示第 $i$ 个物品的质量。第三行包含一个由 $m$ 个整数组成的序列 $c_1, c_2, \dots, c_m$ ($1 \le c_i \le 10^8$),其中 $c_i$ 表示第 $i$ 个背包的承重能力。
输出格式
输出的第一行应包含一个整数,表示装下所有物品所需的最少背包数量。如果无法装下所有物品,则输出单词 NIE。
样例
输入 1
4 3 4 2 10 3 11 18 9
输出 1
2
说明 1
例如,可以购买第一个和第三个背包。最重的物品可以放在承重为 11 的背包中,而其余物品可以放入承重为 9 的背包中。