B(z)=e^{-z}\hat{A}(z)
```cpp
#include <cstdio>
#include <algorithm>
const int N = 1e6 + 10, mod = 998244353; typedef long long ll;
inline int ksm(int a, int b)
{
int ret = 1;
while (b)
{
if (b & 1) ret = (ll)ret * a % mod;
a = (ll)a * a % mod; b >>= 1;
}
return ret;
}
int rev[N], lim, m, n;
inline void init(int n)
{
lim = 1; m = 0; while (lim <= n) lim <<= 1, ++m;
for (int i = 0; i < lim; ++i) rev[i] = (rev[i >> 1] >> 1) | ((i & 1) << (m - 1));
}
inline void NTT(int* f, int len, int on)
{
for (int i = 0; i < len; ++i) if (i < rev[i]) std::swap(f[i], f[rev[i]]);
for (int h = 2; h <= len; h <<= 1)
{
int gn = ksm(3, (ll)(mod - 1) / h * on % (mod - 1));
for (int j = 0; j < len; j += h)
for (int k = j, g = 1; k < j + h / 2; ++k, g = (ll)g * gn % mod)
{
int u = f[k], t = (ll)g * f[k + h / 2] % mod;
f[k] = (u + t) % mod; f[k + h / 2] = ((u - t) % mod + mod) % mod;
}
}
if (on == mod - 2) for (int i = 0, inv = ksm(len, on); i < len; ++i) f[i] = (ll)f[i] * inv % mod;
}
int fac[N], ifac[N], F[N], G[N];
int main()
{
int n, m, x; scanf("%d%d%d", &n, &m, &x); fac[0] = ifac[0] = 1;
for (int i = 1; i <= m; ++i) fac[i] = (ll)fac[i - 1] * i % mod;
ifac[m] = ksm(fac[m], mod - 2);
for (int i = m - 1; i >= 1; --i) ifac[i] = (ll)ifac[i + 1] * (i + 1) % mod;
for (int i = 0; i <= m; ++i)
{
scanf("%d", &F[i]); F[i] = (ll)F[i] * ifac[i] % mod;
G[i] = ((i & 1) ? mod - ifac[i] : ifac[i]);
}
init(m << 1); NTT(F, lim, 1); NTT(G, lim, 1);
for (int i = 0; i < lim; ++i) F[i] = (ll)F[i] * G[i] % mod;
NTT(F, lim, mod - 2); int ni = 1, xi = 1, ans = 0;
for (int i = 0; i <= m; xi = (ll)xi * x % mod, ni = (ll)ni * (n - i) % mod, ++i)
(ans += (ll)F[i] * ni % mod * xi % mod) %= mod;
printf("%d\n", ans); return 0;
}
```