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;
inline long long read() {
  char c = getchar();
  int f = 1;
  long long ans = 0;
  while (c > '9' || c < '0') {
    if (c == '-') f = -f;
    c = getchar();
  }
  while (c <= '9' && c >= '0') {
    ans = ans * 10 + c - '0';
    c = getchar();
  }
  return ans * f;
}
const int p = 998244353;
inline long long ksm(long long x, int b) {
  long long ans = 1;
  while (b) {
    if (b & 1) (ans *= x) %= p;
    (x *= x) %= p;
    b >>= 1;
  }
  return ans;
}
inline vector<int> Add(vector<int> f, vector<int> g) {
  int n = max(f.size(), g.size());
  f.resize(n);
  g.resize(n);
  for (int i = 0; i <= n - 1; i++) (f[i] += g[i]) %= p;
  return f;
}
inline vector<int> Mul(vector<int> f, vector<int> g) {
  int n = f.size(), m = g.size();
  vector<int> ans(n + m - 1);
  for (int i = 0; i <= n - 1; i++)
    for (int j = 0; j <= m - 1; j++)
      ans[i + j] = (1ll * f[i] * g[j] + ans[i + j]) % p;
  return ans;
}
inline vector<int> Mul_k(vector<int> f, long long x) {
  int n = f.size();
  for (int i = 0; i <= n - 1; i++) f[i] = x * f[i] % p;
  return f;
}
inline void pr(vector<int> f, char c) {
  for (auto x : f) printf("%d ", x);
  printf(" : %c\n", c);
  ;
}
inline pair<vector<int>, vector<int> > Div_Mod(vector<int> f, vector<int> g) {
  while (g.back() == 0) g.pop_back();
  long long inv = ksm(g.back(), p - 2);
  int n = f.size(), m = g.size();
  vector<int> ans(max(n - m + 1, 1));
  while (n >= m) {
    long long coef = ans[n - m] = inv * f[n - 1] % p;
    for (int i = 0; i <= m - 1; i++)
      f[n - m + i] = (1ll * f[n - m + i] - coef * g[i]) % p;
    f.pop_back();
    n--;
  }
  return make_pair(ans, f);
}
inline vector<int> intergral(vector<int> f) {
  int n = f.size();
  vector<int> ans(n + 1);
  for (int i = 1; i <= n; i++) ans[i] = ksm(i, p - 2) * f[i - 1] % p;
  return ans;
}
inline long long cul(vector<int> f, long long x) {
  int n = f.size();
  long long X = 1, ans = 0;
  for (int i = 0; i <= n - 1; i++) {
    (ans += X * f[i]) %= p;
    (X *= x) %= p;
  }
  return ans;
}
long long fac[2005];
inline long long C(int n, int m) {
  return fac[n] * ksm(fac[n - m] * fac[m] % p, p - 2) % p;
}
int main() {
  int n = read(), k = read(), l = read();
  ;
  fac[0] = 1;
  for (int i = 1; i <= n; i++) fac[i] = fac[i - 1] * i % p;
  vector<int> f({1}), g, A({0, 2, -2}), B({1, -2, 2});
  for (int i = 1; i <= n; i++) f = Mul(f, A);
  g = Add(f, g);
  for (int i = n - 1; i >= k; i--) {
    f = Mul(Div_Mod(f, A).first, B);
    g = Add(g, Mul_k(f, C(n, i)));
  }
  printf("%lld\n", (cul(intergral(g), 1) * l % p + p) % p);
  return 0;
}