#include <bits/stdc++.h>
const int N = 4097, P = 998244353;
int lim, rev[N], w[N], fac[N], ifac[N], f[N], g[N], h[N];
int read() {
  int x;
  scanf("%d", &x);
  return x;
}
int inc(int a, int b) { return a += b - P, a + (a >> 31 & P); }
int dec(int a, int b) { return a -= b, a + (a >> 31 & P); }
int mul(int a, int b) { return 1ll * a * b % P; }
int pow(int a, int k) {
  int r = 1;
  for (; k; k >>= 1, a = mul(a, a))
    if (k & 1) r = mul(a, r);
  return r;
}
void init(int n) {
  int p = (lim = 1 << (32 - __builtin_clz(n))) >> 1, g = pow(3, (P - 1) / lim);
  w[p] = 1, fac[0] = 1;
  for (int i = 1; i < lim; ++i) rev[i] = (rev[i >> 1] >> 1) | (i & 1 ? p : 0);
  for (int i = p + 1; i < lim; ++i) w[i] = mul(w[i - 1], g);
  for (int i = p - 1; i; --i) w[i] = w[i << 1];
  for (int i = 1; i <= n; ++i) fac[i] = mul(fac[i - 1], i);
  ifac[n] = pow(fac[n], P - 2);
  for (int i = n; i; --i) ifac[i - 1] = mul(ifac[i], i);
}
void NTT(int* a, int f) {
  if (!~f) std::reverse(a + 1, a + lim);
  for (int i = 1; i < lim; ++i)
    if (i < rev[i]) std::swap(a[i], a[rev[i]]);
  for (int i = 1; i < lim; i <<= 1)
    for (int j = 0, d = i << 1; j < lim; j += d)
      for (int k = 0, x; k < i; ++k)
        x = mul(a[i + j + k], w[i + k]), a[i + j + k] = dec(a[j + k], x),
        a[j + k] = inc(a[j + k], x);
  if (!~f)
    for (int i = 0, x = P - (P - 1) / lim; i < lim; ++i) a[i] = mul(a[i], x);
}
int main() {
  int n = read(), k = read(), l = read(), ans = 0;
  init(2 * n + 1);
  for (int i = k; i <= n; ++i) f[i] = ifac[i];
  for (int i = 0; i <= n; ++i) g[i] = i & 1 ? P - ifac[i] : ifac[i];
  NTT(f, 1), NTT(g, 1);
  for (int i = 0; i < lim; ++i) f[i] = mul(f[i], g[i]);
  NTT(f, -1);
  for (int i = 1, pw = 2; i <= n; pw = inc(pw, pw), ++i)
    h[i] = mul(mul(mul(mul(fac[i], fac[i]), pw), ifac[i * 2 + 1]), ifac[n - i]);
  for (int i = k; i <= n; ++i) ans = inc(ans, mul(f[i], h[i]));
  printf("%d", mul(mul(ans, fac[n]), l));
}
