问题描述
小蓝正在玩一个攀登高塔的游戏。高塔的层数是无限的,但游戏最多只有
n
n 回合。
小蓝一开始拥有
m
m 点能量,在每个回合都有一个值
A
i
A
i
表示小蓝的角色状态。小蓝每回合可以选择消费任意点能量
C
i
C
i
(最低消费
1
1 点,没有上限),他在这回合将最多可以向上攀爬
A
i
⋅
C
i
A
i
⋅C
i
层。实际攀爬的层数取决于小蓝自己在这回合的表现,不过最差也会向上爬一层。
当某回合小蓝的能量点数耗尽,那么在完成这个回合后,游戏结束。
n
n 回合结束后,不管能量还有没有剩余,游戏都会直接结束。
给出小蓝每回合的
A
i
A
i
和自己一开始的能量点数
m
m。小蓝想知道有多少种不同的可能出现的游玩过程。如果小蓝在两种游玩过程中的任一对应回合花费的能量点数不同或该回合结束时所处层数不同,那么这两种游玩过程就被视为不同。
输入格式
输入的第一行包含两个整数
n
n,
m
m,用一个空格分隔。
第二行包含
n
n 个整数
A
i
A
i
,相邻整数之间使用一个空格分隔,表示小蓝每回合的状态值。
输出格式
输出一行包含一个整数表示给定条件下不同游玩过程的数量。由于答案可能很大,你只需要输出答案对
998244353
998244353 取模的结果。
样例输入
9 15
3 2 5 7 1 4 6 8 3
copy
样例输出
392149233
copy
评测用例规模与约定
对于
40
40% 的评测用例,
n
≤
300
n≤300,
m
≤
500
m≤500;
对于所有评测用例,
1
≤
n
≤
2
×
1
0
5
1≤n≤2×10
5
,
n
≤
m
≤
1
0
18
n≤m≤10
18
,
1
≤
A
i
≤
1
0
9
1≤A
i
≤10
9
。