atcoder#ABC169F. [ABC169F] Knapsack for All Subsets

[ABC169F] Knapsack for All Subsets

配点 : 600600

問題文

長さ NN の正整数列 A1A_1, A2A_2, \ldots, ANA_N と正の整数 SS が与えられます。 集合{1,2,,N}\{1, 2, \ldots , N \} の空でない部分集合 TT について、f(T)f(T) を以下のように定めます。

  • TT の空でない部分集合 {x1,x2,,xk}\{x_1, x_2, \ldots , x_k \} であって、 Ax1+Ax2++Axk=SA_{x_1}+A_{x_2}+\cdots +A_{x_k} = S をみたすものの個数

TT として考えられる集合は 2N12^N-1 通りありますが、そのすべてに対する f(T)f(T) の和を求めてください。ただし、答えは非常に大きくなることがあるので、998244353998244353 で割ったあまりを出力してください。

制約

  • 入力は全て整数である。
  • 1N30001 \leq N \leq 3000
  • 1S30001 \leq S \leq 3000
  • 1Ai30001 \leq A_i \leq 3000

入力

入力は以下の形式で標準入力から与えられる。

NN SS

A1A_1 A2A_2 ...... ANA_N

出力

f(T)f(T) の和を 998244353998244353 で割ったあまりを出力せよ。

3 4
2 2 4
6

それぞれ以下のように計算できて、その和は 66 です。

  • f({1})=0f(\{1\}) = 0
  • f({2})=0f(\{2\}) = 0
  • f({3})=1f(\{3\}) = 1 ( {3}\{3\}11 つ)
  • f({1,2})=1f(\{1, 2\}) = 1 ( {1,2}\{1, 2\}11 つ)
  • f({2,3})=1f(\{2, 3\}) = 1 ( {3}\{3\}11 つ)
  • f({1,3})=1f(\{1, 3\}) = 1 ( {3}\{3\}11 つ)
  • f({1,2,3})=2f(\{1, 2, 3\}) = 2 ( {1,2},{3}\{1, 2\}, \{3\}22 つ)
5 8
9 9 9 9 9
0
10 10
3 1 4 1 5 9 2 6 5 3
3296