object Main extends App {
  val sc = new java.util.Scanner(System.in)
  val n, s = sc.nextInt()
  val a = IndexedSeq.fill(n)(sc.nextInt())

  val mod = 998244353
  def plus(a: Long, b: Long): Long = (a + b) % mod
  def times(a: Long, b: Long): Long = (a * b) % mod

  def pow(a: Long, n: Int, res: Long = 1): Long = {
    if (n == 0) {
      res
    } else if ((n&1) == 0) {
      pow(times(a,a), n >> 1, res)
    } else {
      pow(times(a,a), n >> 1, times(res,a))
    }
  }

  val dp = Array.fill((n+1) * (s+1))(IndexedSeq[Long](-1))
  dp(0) = IndexedSeq(1)
  for (j <- 1 to s) dp(j) = IndexedSeq[Long](0)

  def solve(i: Int, j: Int): IndexedSeq[Long] = {
    if (dp(i * (s+1) + j).head != -1) {
      dp(i * (s+1) + j)
    } else {
      val ans = if (j >= a(i-1)) {
        solve(i-1, j).zipAll(0L +: solve(i-1, j - a(i-1)), 0L, 0L).map{
          case (x,y) => plus(x, y)
        }
      } else {
        solve(i-1, j)
      }
      dp(i * (s+1) + j) = ans
      ans
    }
  }

  val counts = solve(n,s)
  val combs = (0 to n).map(i => pow(2, n-i))
  println(counts.zip(combs).map{case (x,y) => times(x,y)}.reduceOption(plus).getOrElse(0))
}
