装饰珠有 M 种,编号 1 至 M,分别对应 M 种技能,第 i 种装饰珠的等级为 L<sub>i</sub>,只能镶嵌在等级大于等于 L<sub>i</sub> 的装饰孔中。
对第 i 种技能来说,当装备相应技能的装饰珠数量达到 K<sub>i</sub>个时,会产生W<sub>i</sub>(K<sub>i</sub>)的价值,镶嵌同类技能的数量越多,产生的价值越大,即W<sub>i</sub>(K<sub>i-1</sub>)<W<sub>i</sub>(K<sub>i</sub>)。但每个技能都有上限P<sub>i</sub>(1≤P<sub>i</sub>≤7),当装备的珠子数量超过P<sub>i</sub>时,只会产生W<sub>i</sub>(P<sub>i</sub>)的价值。
对于给定的装备和装饰珠数据,求解如何镶嵌装饰珠,使得 6 件装备能得到的总价值达到最大。
**输入描述**
输入的第 1 至 6 行,包含 6 件装备的描述。其中第i行的第一个整数Ni表示第i件装备的装饰孔数量。后面紧接着Ni个整数,分别表示该装备上每个装饰孔的等级L(1≤ L ≤4)。
第 7 行包含一个正整数 M,表示装饰珠 (技能) 种类数量。
第 8 至 M + 7 行,每行描述一种装饰珠 (技能) 的情况。每行的前两个整数L<sub>j</sub>(1≤ L<sub>j</sub> ≤4)和P<sub>j</sub>(1≤ P<sub>j</sub> ≤7)分别表示第 j 种装饰珠的等级和上限。接下来P<sub>j</sub>个整数,其中第 k 个数表示装备该中装饰珠数量为 k 时的价值W<sub>j</sub>(k)。
给 n, m, k, 求有多少对(i, j)满足 1 ≤ i ≤ n, 0 ≤ j ≤ min(i, m) 且C<sub>i</sub><sup>j</sup>≡0(mod k),k 是质数。其中C<sub>i</sub><sup>j</sup>是组合数,表示从 i 个不同的数中选出 j 个组成一个集合的方案数。
**输入格式**
第一行两个数 t, k,其中 t 代表该测试点包含 t 组询问,k 的意思与上文中相同。
接下来 t 行每行两个整数 n, m,表示一组询问。
**输出格式**
输出 t 行,每行一个整数表示对应的答案。由于答案可能很大,请输出答案除以 109 + 7 的余数。
**样例输入**
```
1 2
3 3
```
**样例输出**
```
1
```
**样例说明**
在所有可能的情况中,只有 C<sub>2</sub><sup>1</sup> 是 2 的倍数。
**样例输入**
```
2 5
4 5
6 7
```
**样例输出**
```
0
7
```
**样例输入**
```
3 23
23333333 23333333
233333333 233333333
2333333333 2333333333
```
**样例输出**
```
851883128
959557926
680723120
```
**数据规模和约定**
```
对于所有评测用例,1 ≤ k ≤ 108, 1 ≤ t ≤ 105, 1 ≤ n, m ≤ 1018,且 k 是质数。评测时将使用 10 个评测用例测试你的程序