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;
const int MX = 4005;
const long long MOD = 998244353;
long long qpow(long long x, long long t) {
  long long ans = 1;
  while (t) {
    if (t & 1) ans = ans * x % MOD;
    x = x * x % MOD;
    t >>= 1;
  }
  return ans;
}
long long inv(long long x) { return qpow(x, MOD - 2); }
template <typename T>
void add(T &x, const T &y) {
  x += y;
  if (x >= MOD) x %= MOD;
}
template <typename T>
void read(T &x) {
  x = 0;
  char c = getchar();
  bool f = 0;
  while (!isdigit(c) && c != '-') c = getchar();
  if (c == '-') f = 1, c = getchar();
  while (isdigit(c)) x = x * 10 + c - '0', c = getchar();
  if (f) x = -x;
}
long long C[MX][MX];
long long n, k, l, ivl;
void init() {
  for (int i = 0; i < MX; i++) {
    C[i][0] = 1;
    for (int j = 1; j <= i; j++)
      C[i][j] = (C[i - 1][j] + C[i - 1][j - 1]) % MOD;
  }
  ivl = inv(l);
}
long long calc(long long *f, long long x) {
  long long y = 0;
  for (int i = MX - 1; i >= 0; i--) y = (y * x + f[i]) % MOD;
  return y;
}
void interpolation(long long *src, int len, long long *fun) {
  long long f0[MX], f[MX], tmp[MX];
  memset(f0, 0, sizeof(f0));
  memset(fun, 0, sizeof(fun));
  f0[0] = 1;
  for (int i = 0; i <= len; i++) {
    for (int j = len + 1; j >= 1; j--)
      f0[j] = (f0[j - 1] - f0[j] * i + MOD * MOD) % MOD;
    f0[0] = f0[0] * i % MOD;
  }
  for (int i = 0; i <= len; i++) {
    memmove(tmp, f0, sizeof(tmp));
    for (int j = len + 1; j >= 1; j--) {
      f[j - 1] = tmp[j];
      add(tmp[j - 1], f[j - 1] * i);
    }
    long long mul = 1;
    for (int j = 0; j <= len; j++)
      if (i != j) mul = mul * (i - j + MOD) % MOD;
    mul = inv(mul);
    for (int j = 0; j <= len; j++) add(fun[j], f[j] * mul % MOD * src[i]);
  }
}
void integral(long long *f) {
  f[0] = 0;
  for (int i = MX - 1; i >= 1; i--) f[i] = f[i - 1] * inv(i) % MOD;
}
void work() {
  static long long val[MX], f[MX];
  memset(val, 0, sizeof(val));
  for (int x = 0; x <= n * 2; x++) {
    long long m1 = 2ll * x * (l - x + MOD) % MOD * ivl % MOD * ivl % MOD;
    long long m2 = inv((1 - m1 + MOD) % MOD);
    long long f1 = qpow(m1, k), f2 = qpow((1 - m1 + MOD) % MOD, n - k);
    for (int i = k; i <= n; i++) {
      add(val[x], C[n][i] * f1 % MOD * f2);
      f1 = f1 * m1 % MOD;
      f2 = f2 * m2 % MOD;
    }
  }
  interpolation(val, n * 2, f);
  integral(f);
  printf("%lld\n", calc(f, l));
}
int main() {
  read(n), read(k), read(l);
  init();
  work();
  return 0;
}