問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!
長さ N の数列 A = a_1, a_2, ..., a_N と正の整数 K が与えられます。
a_1, a_2, ..., a_N からいくつかの要素を選んでその和を K とすることはできるかを判定してください。
ただし、1 つも選ばないときの和は 0 とします。
和を K とすることができない場合は -1
を出力してください。
もし可能な場合は和を K とするために選ぶ要素の個数 M が最小で、選んだ要素の値を降順に並べた数列 B = b_1, b_2, ..., b_M が辞書式順序で最大となるような選び方を出力してください。
入力例 1 では A の全ての要素を選択すると和を 6 にすることができます。
選択した要素を降順に並べた数列 B は 3, 2, 1
となります。
入力例 2 で和を 4 にすることができる要素の選び方は以下の 3 種類あります。(要素の順不同)
(1) 1, 3
(2) 1, 2, 1
(3) 2, 2
これらのうち、M が最小で降順に並べたときの辞書式順序が最大となるのは (1) です。
入力例 3 では和を 5 にすることはできません。
N K
a_1 a_2 ... a_N
出力は次の形式に従って行ってください。
M
b_1 b_2 ... b_M
すべてのテストケースにおいて、以下の条件をみたします
・入力はすべて整数
・1 ≦ N ≦ 1,000
・1 ≦ K ≦ 2,000
・1 ≦ a_i ≦ 100 (1 ≦ i ≦ N)
3 6
1 2 3
3
3 2 1
5 4
1 3 2 2 1
2
3 1
5 5
2 2 2 2 2
-1