import sys

sys.setrecursionlimit(10000000)

MOD = 998244353

INF = 10 ** 15



def main():

    N,S = list(map(int,input().split()))

    A = list(map(int,input().split()))



    dp = [0] * (1 + S)

    dp[0] = pow(2,N,MOD)

    inv2 = pow(2,MOD - 2,MOD)

    for a in A:

        for s in range(S,a - 1,-1):

            dp[s] = (dp[s] + dp[s - a] * inv2)%MOD

    print((dp[S]))

if __name__ == '__main__':

    main()
import sys

sys.setrecursionlimit(10000000)

MOD = 998244353

INF = 10 ** 15

import numpy as np



def main():

    N,S = list(map(int,input().split()))

    A = list(map(int,input().split()))



    dp = np.zeros(S + 1,np.int64)

    dp[0] = pow(2,N,MOD)

    inv2 = pow(2,MOD - 2,MOD)

    for a in A:

        dp[a:] = np.mod(dp[a:] + dp[:-a] * inv2,MOD)

    print((dp[S]))

if __name__ == '__main__':

    main()
import sys

sys.setrecursionlimit(10000000)
MOD = 998244353
INF = 10**15


def main():
    N, S = list(map(int, input().split()))
    A = list(map(int, input().split()))
    dp = [0] * (1 + S)
    dp[0] = pow(2, N, MOD)
    inv2 = pow(2, MOD - 2, MOD)
    for a in A:
        for s in range(S, a - 1, -1):
            dp[s] = (dp[s] + dp[s - a] * inv2) % MOD
    print((dp[S]))


if __name__ == "__main__":
    main()

import sys

sys.setrecursionlimit(10000000)
MOD = 998244353
INF = 10**15
import numpy as np


def main():
    N, S = list(map(int, input().split()))
    A = list(map(int, input().split()))
    dp = np.zeros(S + 1, np.int64)
    dp[0] = pow(2, N, MOD)
    inv2 = pow(2, MOD - 2, MOD)
    for a in A:
        dp[a:] = np.mod(dp[a:] + dp[:-a] * inv2, MOD)
    print((dp[S]))


if __name__ == "__main__":
    main()

+import numpy as np -    dp = [0] * (1 + S) +    dp = np.zeros(S + 1, np.int64) -        for s in range(S, a - 1, -1): -            dp[s] = (dp[s] + dp[s - a] * inv2) % MOD +        dp[a:] = np.mod(dp[a:] + dp[:-a] * inv2, MOD)