constexprintqpow(int bs, int64_t idx = kMod - 2){ int ret = 1; for (; idx; idx >>= 1, bs = (int64_t)bs * bs % kMod) if (idx & 1) ret = (int64_t)ret * bs % kMod; return ret; }
inlineintadd(int x, int y){ return (x + y >= kMod ? x + y - kMod : x + y); } inlineintsub(int x, int y){ return (x >= y ? x - y : x - y + kMod); } inlinevoidinc(int &x, int y){ (x += y) >= kMod ? x -= kMod : x; } inlinevoiddec(int &x, int y){ (x -= y) < 0 ? x += kMod : x; }
voiddickdreamer(){ std::cin >> n >> m >> v; for (int i = 1; i <= n; ++i) std::cin >> a[i]; f[0][0] = 1; for (int i = 1; i <= n; ++i) { for (int j = 0; j <= std::min(n, m); ++j) { inc(f[i][j], 1ll * a[i] * f[i - 1][j] % kMod); inc(f[i][j], 1ll * j * v % kMod * f[i - 1][j] % kMod); inc(f[i][j + 1], 1ll * (m - j) * i % kMod * v % kMod * f[i - 1][j] % kMod); } } int ans = 0; for (int i = 0; i <= std::min(n, m); ++i) inc(ans, 1ll * f[n][i] * qpow(n, m - i) % kMod); std::cout << 1ll * ans * qpow(qpow(n), m) % kMod << '\n'; }