#include using namespace std; #define rep(i,a,b) for (int i=(int)(a);i<(int)(b);i++) #include using mint = atcoder::modint998244353; struct F{ mint c = 0; mint v = 0; }; F operator*=(F &a, F b){ return a = {a.c * b.c, a.c * b.v + a.v * b.c}; } F operator+=(F &a, F b){ return a = {a.c + b.c, b.v + a.v}; } void solve(); // DEAR MYSTERIES / TOMOO int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int t = 1; // cin >> t; rep(i, 0, t) solve(); } void solve(){ int N, K; cin >> N >> K; vector A(N); rep(i, 0, N) cin >> A[i]; vector dp1(K + 1), dp2(K + 1); dp1[0] = {1, 0}; rep(rp, 0, N){ for (int i = K; i > 0; i--){ dp2[i - 1] += dp2[i]; } dp2[K] += dp1[K]; dp1[K] = {0, 0}; rep(i, 0, K){ dp1[i + 1] += dp1[i]; } mint p2 = 1, pa = 1; rep(i, 0, K + 1){ F tmp = {p2, pa * p2}; dp1[i] *= tmp; dp2[i] *= tmp; p2 *= 2, pa *= A[rp]; } } mint ans = 0; rep(i, 0, K + 1) ans += dp2[i].v; ans /= (mint(4)).pow(K); cout << ans.val() << "\n"; }