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 JAVA):

Solution:
// upsolve with rainboy
import java.io.*;
import java.util.*;

public class CF1153F {
	static final int MD = 998244353;
	static int[][] ch;
	static void init(int n) {
		ch = new int[1 + n][1 + n];
		ch[0][0] = 1;
		for (int i = 1; i <= n; i++) {
			ch[i][0] = 1;
			for (int j = 1; j <= i; j++)
				ch[i][j] = (ch[i - 1][j] + ch[i - 1][j - 1]) % MD;
		}
	}
	static long power(int a, int k) {
		if (k == 0)
			return 1;
		long p = power(a, k / 2);
		p = p * p % MD;
		if (k % 2 == 1)
			p = p * a % MD;
		return p;
	}
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		int n = Integer.parseInt(st.nextToken());
		int k = Integer.parseInt(st.nextToken());
		int l = Integer.parseInt(st.nextToken());
		init(n);
		long[] pp = new long[1 + n + n];
		long[] qq = new long[1 + n + n];
		pp[n] = power(2, n);
		for (int i = 0; i < n; i++)
			for (int j = n + n; j > 0; j--)
				pp[j] = (pp[j] - pp[j - 1]) % MD;
		long[] aa = new long[1 + n + n];
		for (int j = 0; j <= n + n; j++)
			aa[j] = pp[j];
		long inv2 = (MD + 1) / 2;
		for (int i = 1; i <= n - k; i++) {
			// qq := pp / p, where p = 2x (1 - x)
			// divide by 2x
			for (int j = 0; j < n + n; j++)
				qq[j] = pp[j + 1] * inv2 % MD;
			qq[n + n] = 0;
			// divide by 1 - x is multiply by 1 + x + x^2 + x^3 + ...
			for (int j = 1; j <= n + n; j++)
				qq[j] = (qq[j] + qq[j - 1]) % MD;
			// pp := pp * (1 - p) / p = pp / p - pp = qq - pp
			for (int j = 0; j <= n + n; j++)
				pp[j] = (qq[j] - pp[j]) % MD;
			long a = ch[n][i];
			for (int j = 0; j <= n + n; j++)
				aa[j] = (aa[j] + a * pp[j]) % MD;
		}
		// integrate x^i to x^{i + 1} / (i + 1)
		long a = 0;
		for (int i = 0; i <= n + n; i++)
			a = (a + aa[i] * power(i + 1, MD - 2)) % MD;
		a = (a * l % MD + MD) % MD;
		System.out.println(a);
	}
}