致两千年后的你
题号:NC212002
时间限制:C/C++/Rust/Pascal 3秒,其他语言6秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述


牛牛给你了  个数 ,同时他对于非空集合  ,定义 f_0(S) 表示其是否合法,其中  f_0(S) 的值关乎于两个常数    和    。

形式化的说,集合  合法当且仅当存在一组系数  使得:



此时  ,否则  

对于   ,定义 ,即  为  的所有子集  的和。

现给定  个数  ,进行  组查询,每次给定  ,求 f_k(U),其中  表示全集。由于结果可能很大,答案需要对  取模。

输入描述:

第一行两个正整数依次表示 n, T


接下来一行 n 个正整数,第 i 个正整数表示 a_i 

接下来 T 行,每行三个正整数,依次表示 x, k, P

输出描述:

输出共 T 行,每行一个正整数,表示 f_k(U) 对   取模的结果。
示例1

输入

复制
3 2
1 2 6
1 1 3
1 2 3

输出

复制
6
15

说明

对于第一组查询 k=1,等价于求有多少个非空集合合法,不难注意到总共有 7 个集合,其中当集合为 {\{6\}} 时非法,其余情况均合法。

对于第二组查询,{k=2},不难注意到:

f_1(\{1\})=f_1(\{2\})=1,f_1(\{6\})=0,f_1(\{1,2\})=3,f_1(\{1,6\})=f_1(\{2,6\})=2,f_1(\{1,2,6\})=6

而 f_2(\{1,2,6\}) 为他们的和,即 {15}

示例2

输入

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

输出

复制
116
127
1691
9904
46125

备注:

保证  ,保证  的最大质因子   。