#D1007. 子集の子集

子集の子集

题目背景

nn个硬币,每个价值 aia_i 。所有能够凑出 kk 的硬币集合,其子集能表示的价值有多少种?

题目描述

奆想从蒻那里买一块昂贵的巧克力。他有 nn 枚硬币,其中第 ii 枚硬币的价值是 cic_i 。巧克力的价格是 kk ,因此奆将从他的硬币中取出一个总和等于 kk 的子集交给蒻。

看着自己的硬币,奆想到了一个问题:把硬币给了蒻后,蒻能用它们创造出什么价值呢?他很嫉妒,不希望蒻创造出很多价值。因此他想知道所有可能的值 xx ,即蒻能用总和为 kk 的某个硬币子集制造出 xx 价值。

简单来说,奆想要知道有多少种 xx ,存在一个总和为 kk 的硬币子集,这个子集的某个子集的总和为 xx ,即存在某种支付巧克力的方式,蒻能用这些硬币得到总和 xx

输入格式

第一行包含两个整数 nnkk ( 1    n,k    5001  \le  n, k  \le  500 ),分别是硬币的数量和巧克力的价格。

第二行包含 nn 个整数 c1,c2,...,cn(1ci500)c_1, c_2, ..., c_n ( 1 \le c_i \le 500 ) ,即奆硬币的价值。

保证使用这些硬币可以凑出 kk 的价值。

输出格式

输出的第一行包含一个整数 qq,可能的 xx 的数量。

第二行按升序打印 qq 个整数,所有可能的 xx 值。

输入输出样例 #1

输入 #1

6 18
5 6 1 10 12 2

输出 #1

16
0 1 2 3 5 6 7 8 10 11 12 13 15 16 17 18

输入输出样例 #2

输入 #2

3 50
25 25 50

输出 #2

3
0 25 50