The classic problem

Accepts: 2
Submissions: 15
Time Limit: 8000/3000 MS (Java/Others)
Memory Limit: 65536/65536 K (Java/Others)
问题描述
有$N$个物品,他们的价值分别是$0 .. N-1$,现在要在这些物品中选一个子集(可以什么都不选,这时和算$0$),使得被选中的物品的价值和模$m$为$0$
进一步规定有$K$个价值为$(a_1,a_2,a_3..a_K)$的物品不能选($a_1,a_2,a_3..a_K$互不相同).
求方案数对$998244353$取模的值.
输入描述
第一行一个$T$,表示数据组数.
接下来$T$组数据,每组数据第一行三个数字$N,m,K$,含义如题.
第二行包含了$K$个数字$a_1,a_2..a_K$,表示不能选的数字是哪些.
$T \leq 200, N \leq 10^9, m \leq 2048, K \leq 4000$, $m$一定是二的整数次幂.
只有$4$组数据的$m > 200$.
输出描述
$T$行,对于每组数据输出答案.
输入样例
1
6 8 1
2
输出样例
6
Hint
有6个物品,价值是0..5,其中2不能选,选一个子集使他的和为8的倍数.
选法有这6种.
0+1+3+4=8
1+3+4=8
0+3+5=8
3+5=8
0
不选任何数字