#arc086d. [arc086_d]Shift and Decrement

[arc086_d]Shift and Decrement

题目描述

黑板上写着NN个非负整数:A1,...,ANA_1, ..., A_N

Snuke可以按任意顺序,最多总共进行KK次操作:

  • 操作A:将黑板上的每个整数XX替换为XX除以22,向下取整得到的整数。
  • 操作B:将黑板上的每个整数XX替换为XX减去11。如果黑板上有一个或多个00,则不能执行此操作。

求Snuke执行操作后,在黑板上可能出现的不同整数组合的数量,对1,000,000,0071,000,000,007取模后的结果。

约束条件

  • 1N2001 \leq N \leq 200
  • 1Ai10181 \leq A_i \leq 10^{18}
  • 1K10181 \leq K \leq 10^{18}
  • AiA_iKK都是整数。

输入

输入从标准输入读取,格式如下:

NN KK A1A_1 A2A_2 ...... ANA_N

输出

输出Snuke执行操作后,在黑板上可能出现的不同整数组合的数量,对1,000,000,0071,000,000,007取模后的结果。

示例输入1

2 2
5 7

示例输出1

6

黑板上可能的整数组合有六种:(1,1)(1, 1), (1,2)(1, 2), (2,3)(2, 3), (3,5)(3, 5), (4,6)(4, 6)(5,7)(5, 7)。例如,(1,2)(1, 2)可以通过按照操作A和操作B的顺序执行获得。

示例输入2

3 4
10 13 22

示例输出2

20

示例输入3

1 100
10

示例输出3

11

示例输入4

10 123456789012345678
228344079825412349 478465001534875275 398048921164061989 329102208281783917 779698519704384319 617456682030809556 561259383338846380 254083246422083141 458181156833851984 502254767369499613

示例输出4

164286011