namespace maths { template <classT> T quick_pow(T a, ull b, T id = T()){ T ret = id; for (; b; b >>= 1, a = a * a) { if (b & 1) { ret = a * ret; } } return ret; }
template <classT> T quick_pow(T a, const std::string &s, T id = T()){ T ret = id; for (size_t i = 0; i < s.size(); i++, a = a * a) { if (s[i] == '1') { ret = a * ret; } } return ret; }
} // namespace maths
namespace solve { const uint mod = 998244353; using mll = maths::modular<mod>; voidsolve(){ uint n, k, m; std::cin >> n >> k >> m;
std::vector<uint> poss(n); for (size_t i = 0; i < n; i++) { std::cin >> poss[i]; }
std::vector<std::vector<mll>> dp( m + 1, std::vector<mll>(n - k + 1)); // 第 k 大。从 0 开始。
dp[0][0] = ((n - k) & 1) ? 1 : mod - 1;
for (size_t i = 1; i <= n - k; i++) { dp[0][i] = dp[0][i - 1] * (-1); }
for (size_t i = 0; i < n; i++) { std::vector<std::vector<mll>> nxt(m + 1, std::vector<mll>(n - k + 1)); for (size_t j = 0; j <= m; j++) { if (poss[i] + j <= m) { nxt[poss[i] + j][0] += -dp[j][0]; } nxt[j][0] += dp[j][0]; }
for (size_t rank = 1; rank <= n - k; rank++) { for (size_t j = 0; j <= m; j++) { if (poss[i] + j <= m) { nxt[poss[i] + j][rank] += -(dp[j][rank] + dp[j][rank - 1]); } nxt[j][rank] += dp[j][rank]; } }
dp = nxt; }
mll ans = 0;
for (size_t i = 1; i <= m; i++) { ans += dp[i][n - k] * m * maths::quick_pow<mll>(i, mod - 2, 1); }
std::cout << ans << std::endl; } } // namespace solve