吃豆豆
题号:NC207455
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

昌子哥变成了一个吃豆人!
摆在他面前的是一排豆豆,每颗豆豆有它的价值。他决定从某颗豆豆开始吃,往右连续吃若干个豆豆。
他当然是想让价值最大。但是有一个问题存在,如果价值大于Max,那么昌子哥将会被系统认定为作弊。所以你需要在价值总和不超过Max的情况下吃价值尽量高的豆豆。输出这个最大值,并且还需要告诉他可能的方案数哦~

输入描述:

不定组输入.
每组测试数据第一行为两个整数n和Max()分别代表豆豆的个数以及价值上限。
第二行n个整数,代表第i个豆豆的价值。()

保证单个测试文件内测试数据的n之和小于等于


输出描述:

对于每组测试数据,若塔子哥无法吃至少一个豆豆,输出"No!"(不含双引号).
否则:
昌子哥一定要吃豆豆。

第一行输出一个整数Ans代表能吃到的最大价值。注意:Ans不应该超过Max.

接下来一行,输出一个整数代表所有可能的吃豆豆方案使得你获得的价值恰好为Ans的方案数


示例1

输入

复制
3 3
1 2 3

输出

复制
3
2

说明

在最大值不超过3的情况下,有两种吃豆豆的方案使得价值最大:

从第一个位置开始,向右吃两个豆豆 得到 3

从第三个位置开始,向右吃一个豆豆 得到 3
示例2

输入

复制
3 3
4 5 6

输出

复制
No!
示例3

输入

复制
3 4
1 1 1

输出

复制
3
1