Problem: Getting closer and closer to a mathematician, Serval becomes a university student on math major in Japari University. On the Calculus class, his teacher taught him how to calculate the expected length of a random subsegment of a given segment. Then he left a bonus problem as homework, with the award of a garage kit from IOI. The bonus is to extend this problem to the general case as follows.

You are given a segment with length l. We randomly choose n segments by choosing two points (maybe with non-integer coordinates) from the given segment equiprobably and the interval between the two points forms a segment. You are given the number of random segments n, and another integer k. The 2n endpoints of the chosen segments split the segment into (2n+1) intervals. Your task is to calculate the expected total length of those intervals that are covered by at least k segments of the n random segments.

You should find the answer modulo 998244353.

Input

First line contains three space-separated positive integers n, k and l (1≤ k ≤ n ≤ 2000, 1≤ l≤ 10^9).

Output

Output one integer — the expected total length of all the intervals covered by at least k segments of the n random segments modulo 998244353.

Formally, let M = 998244353. It can be shown that the answer can be expressed as an irreducible fraction p/q, where p and q are integers and q not ≡ 0 \pmod{M}. Output the integer equal to p ⋅ q^{-1} mod M. In other words, output such an integer x that 0 ≤ x < M and x ⋅ q ≡ p \pmod{M}.

Examples

Input


1 1 1


Output


332748118


Input


6 2 1


Output


760234711


Input


7 5 3


Output


223383352


Input


97 31 9984524


Output


267137618

Note

In the first example, the expected total length is \int_0^1 \int_0^1 |x-y|  dx dy = {1\over 3}, and 3^{-1} modulo 998244353 is 332748118.

Solution (in CPP):

Solution:
#include <bits/stdc++.h>
using namespace std;
int w[262144], a[262144 | 1], a1[262144], a2[262144], a3[262144], jc[262144],
    jv[262144], iv[262144];
inline void prepare(), NTT(int*, int, bool);
inline int pow(int, int), Fmod(const int&), c(int, int);
int main() {
  int n, K, l;
  cin >> n >> K >> l, prepare();
  int lc(a[n << 1 | 1]), lm(1 << lc);
  for (int i(0), j, w1(262144 / lm), w2(0); i < lm; ++i, w2 += w1) {
    int i1((w[w2] * 1ll * (998244353 + 1 - w[w2]) << 1) % 998244353),
        i2(Fmod(1 - i1));
    for (j = a2[0] = a3[0] = 1; j <= n; ++j)
      a2[j] = a2[j - 1] * 1ll * i1 % 998244353,
      a3[j] = a3[j - 1] * 1ll * i2 % 998244353;
    for (j = K; j <= n; ++j)
      a1[i] =
          (a1[i] + c(n, j) * 1ll * a2[j] % 998244353 * a3[n - j]) % 998244353;
  }
  NTT(a1, lc, 1);
  int ans(0);
  for (int i(lm); ~i; --i) ans = (ans + a1[i] * 1ll * iv[i + 1]) % 998244353;
  ans = ans * 1ll * l % 998244353;
  return printf("%d", ans), 0;
}
inline void NTT(int* a, int lc, bool type) {
  static int go[262144];
  static unsigned long long a1[262144];
  int n(1 << lc);
  for (int i(1); i ^ n; ++i) {
    go[i] = go[i >> 1] >> 1 | (i & 1) << lc - 1;
    if (i < go[i]) swap(a[i], a[go[i]]);
  }
  for (int i(0); i ^ n; ++i) a1[i] = a[i];
  for (int i(1), j, k, t, w1, w2; i ^ n; i <<= 1)
    for (j = 0, w1 = 262144 / (i << 1); j ^ n; j += i << 1)
      for (k = j, w2 = 0; k ^ (j | i); ++k, w2 += w1)
        t = a1[k + i] * w[w2] % 998244353, a1[k + i] = a1[k] + 998244353 - t,
        a1[k] += t;
  for (int i(0); i ^ n; ++i) a[i] = a1[i] % 998244353;
  if (type) {
    reverse(a + 1, a + n);
    int iv(998244353 - ((998244353 - 1) >> lc));
    for (int i(0); i ^ n; ++i) a[i] = a[i] * 1ll * iv % 998244353;
  }
}
inline int c(int n, int r) {
  return jc[n] * 1ll * jv[r] % 998244353 * jv[n - r] % 998244353;
}
inline int Fmod(const int& x) { return x + ((x >> 31) & 998244353); }
inline void prepare() {
  w[w[0] = iv[1] = 1] = pow(3, (998244353 - 1) / 262144);
  for (int i(2); i < 262144; ++i)
    w[i] = w[i - 1] * 1ll * w[1] % 998244353,
    iv[i] = (998244353 - 998244353 / i) * 1ll * iv[998244353 % i] % 998244353;
  for (int i(0); 1 << i <= 262144; ++i) a[1 << i] = i;
  for (int i(262144); i; --i) a[i] = a[i] ? a[i] : a[i + 1];
  for (int i(jc[0] = jv[0] = 1); i < 262144; ++i)
    jc[i] = jc[i - 1] * 1ll * i % 998244353,
    jv[i] = jv[i - 1] * 1ll * iv[i] % 998244353;
}
inline int pow(int x, int y) {
  int ans(1);
  while (y) {
    if (y & 1) ans = ans * 1ll * x % 998244353;
    x = x * 1ll * x % 998244353, y >>= 1;
  }
  return ans;
}