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 mod = 998244353;
int sum(int a, int b) {
  int s = a + b;
  if (s >= mod) s -= mod;
  return s;
}
int mult(int a, int b) { return (1LL * a * b) % mod; }
const int maxN = 4005;
int c[maxN][maxN];
int n, k, l;
int f[maxN];
int pw(int a, int b) {
  if (b == 0) return 1;
  if (b & 1) return mult(a, pw(a, b - 1));
  int res = pw(a, b / 2);
  return mult(res, res);
}
int fact[maxN];
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  srand(time(0));
  cin >> n >> k >> l;
  l %= mod;
  f[0] = 1;
  for (int i = 1; i <= n; i++) f[i] = mult(f[i - 1], 2 * i - 1);
  fact[0] = 1;
  for (int i = 1; i < maxN; i++) fact[i] = mult(fact[i - 1], i);
  int coef = mult(l, pw(2 * n + 1, mod - 2));
  int ans = 0;
  c[0][0] = 1;
  for (int i = 1; i < maxN; i++) {
    c[i][0] = 1;
    for (int j = 1; j <= i; j++) {
      c[i][j] = sum(c[i - 1][j], c[i - 1][j - 1]);
    }
  }
  for (int i = 1; i < 2 * n; i++) {
    int a = i;
    int b = 2 * n - i;
    int total = f[n];
    int val = 0;
    for (int take = k; take <= min(a, b); take++) {
      if (take % 2 != a % 2) continue;
      int c1 = mult(fact[take], mult(c[a][take], c[b][take]));
      c1 = mult(c1, mult(f[(a - take) / 2], f[(b - take) / 2]));
      val = sum(val, c1);
    }
    ans = sum(ans, mult(val, pw(total, mod - 2)));
  }
  cout << mult(ans, coef);
  return 0;
}