#if 1
#ifdef LOCAL
#define _GLIBCXX_DEBUG 1
#define dbg(...) cerr << "LINE(" << __LINE__ << ") -> [" << #__VA_ARGS__ << "]: [", DBG(__VA_ARGS__)
#else
#define dbg(...) 0
#endif

#include <bits/stdc++.h>
using namespace std;

#define all(x) begin(x), end(x)
typedef pair<int, int> pii;
typedef vector<int> vi;
#endif

int cnt[210000];
int sm[420000];

const int mod = 998244353;
const int inv2 = (998244354/2);

long long calc(long long x) {
    return ((x * (x+1)) % mod) * inv2 % mod;
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    
    int a,b,c;
    cin >> a >> b >> c;

    long long t = calc(a) * calc(b) % mod;
    t = (t * calc(c)) % mod;

    cout << t << endl;
}
#include <stdio.h>
#include <set>
#include <map>
#include <unordered_map>
#include <unordered_set>
#include <list>
#include <queue>
#include <stack>
#include <cmath>
#include <ctime>
#include <cstdio>
#include <vector>
#include <string>
#include <bitset>
#include <cctype>
#include <cstdlib>
#include <cstring>
#include <utility>
#include <numeric>
#include <complex>
#include <sstream>
#include <fstream>
#include <iomanip>
#include <cassert>
#include <iostream>
#include <iterator>
#include <algorithm>
#include <functional>
//#include <atcoder/all>
//using namespace atcoder;
using namespace std;
typedef long long ll;
const double EPS = 1e-9;
typedef vector<int> vint;
typedef vector<vector<int>> v2int;
typedef vector<vector<vector<int>>> v3int;
typedef vector<ll> vll;
typedef vector<vector<ll>> v2ll;
typedef vector<vector<vector<ll>>> v3ll;
typedef list<int> liint;
typedef pair<int, int> pint;
typedef vector<pair<int, int>> vpint;
typedef vector<pair<ll, ll>> vpll;
typedef vector<pair<ll, int>> vpll_int;
typedef vector<pair<int, ll>> vpint_ll;
typedef set<pair<int, int>> spint;
typedef set<pair<ll, int>> spll;
typedef unordered_map<int, unordered_set<int>> Graph;
const int INF = int(2e9);
const ll LINF = ll(2e9) * ll(2e9);
#define rep(i, n) REP(i, 0, n)
#define ALL(v) v.begin(), v.end()
#define MSG(a) cout << #a << " " << a << endl;
#define REP(i, x, n) for(int i = x; i < n; i++)
template<class T, class C> void chmax(T& a, C b) { a > b ? : a = b; }
template<class T, class C> void chmin(T& a, C b) { a < b ? : a = b; }

const int MAX = 510000;
const ll MOD = 998244353;

ll fac[MAX], finv[MAX], inv[MAX];


void COMinit() {
    fac[0] = fac[1] = 1;
    finv[0] = finv[1] = 1;
    inv[1] = 1;
    for (int i = 2; i < MAX; i++) {
        fac[i] = fac[i - 1] * i % MOD;
        inv[i] = MOD - inv[MOD % i] * (MOD / i) % MOD;
        finv[i] = finv[i - 1] * inv[i] % MOD;
    }
}

ll COM(int n, int k) {
    if (n < k) return 0;
    if (n < 0 || k < 0) return 0;
    return fac[n] * (finv[k] * finv[n - k] % MOD) % MOD;
}

ll modpow(ll a, ll n, ll mod) {
    ll res = 1;
    while (n > 0) {
        if (n & 1) res = res * a % mod;
        a = a * a % mod;
        n >>= 1;
    }
    return res;
}


ll modinv(ll a, ll mod) {
    return modpow(a, mod - 2, mod);
}


ll mod(ll val, ll m) {
    ll res = val % m;
    if (res < 0) res += m;
    return res;
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int N, K;
    cin >> N >> K;
    vll A(N);
    rep(i, N) cin >> A[i];

    unordered_map<int, ll> SK;
    REP(x, 0, K + 1) {
        rep(i, N) {
            SK[x] += (modpow(A[i], abs(x), MOD));
            SK[x] %= MOD;
        }
    }
    COMinit();
    REP(X, 1, K + 1) {
        ll ans = 0;
        rep(k, X + 1) {
            ll sk = (SK[X - k] * SK[k]) % MOD;
            //sk = (sk * modinv(2, MOD)) % MOD;
            ll t = (COM(X, k) * sk) % MOD;
            //t = (t * modinv(2, MOD)) % MOD;
            ans += t;
            ans %= MOD;
        }
        ll sub = modpow(2, X, MOD) * SK[X] % MOD;
        ans = mod(ans - sub, MOD);
        ans = ans* modinv(2, MOD) % MOD;
        cout << ans << endl;
    }

    return 0;
}