回到过去
题号:NC201767
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

想回到过去,试着让故事继续~
小y一直幻想着回到过去,改变历史。
终于,上帝给了他一次改变历史的机会。具体地说,他获得了n个时光胶囊。第i个时光胶囊可以让时光倒流a_i天。我们将时光倒流天数相同的时光胶囊视为同一种。
小y想恰好回到m天前。而携带过多种类的时光胶囊会浪费太多体力。所以他想知道有哪些种类的时光胶囊是必须携带的。
数据保证一定可以选择若干个胶囊能过恰好回到m天前。
详细解释请参照样例。

输入描述:

第一行包含两个正整数n,m。含义见【题目描述】
第二行共n个用空格隔开的正整数,第i个整数a_i表示一个可以使时光倒流a_i天的时光胶囊。

输出描述:

输出共两行。
第一行一个整数表示必须携带的时光胶囊的种类数。
第二行若干个整数。分别表示这些必须携带的时光胶囊所能时光倒流的天数。并且按照天数从小到大排序输出。
示例1

输入

复制
4 15
1 1 2 13

输出

复制
1
13

说明

共有两种满足条件的选择方案:
方案一:1 + 1 + 13 = 15
方案二:2 + 13 = 15
两种方案中都含有13,所以13是必须被选择的一种时光胶囊。

备注:

对于的数据满足:
对于的数据满足:
对于另外的数据满足:并且每种时光胶囊只有一个。
对于的数据满足:,不同种类的时光胶囊效果之和不超过