const MOD: i64 = 998244353; fn main() { let stdin = std::io::stdin(); let mut line = String::new(); stdin.read_line(&mut line).unwrap(); let line: Vec<&str> = line.split_whitespace().collect(); let n = line[0].parse::().unwrap(); let m = line[1].parse::().unwrap(); let k = line[2].parse::().unwrap(); // 1列目は任意に選択可能 let mut prev = vec![1i64; 1 << n]; for _ in 1..m { // 2列目以降 let mut next = vec![0i64; 1 << n]; for prev_bit in 0..1 << n { // prev_bit: 前列の選択 for next_bit in 0..1 << n { let mut count = 0; for j in 0..n { if (next_bit >> j & 1) == 1 && (prev_bit >> j & 1) == 1 { count += 1; } } if count >= k { next[next_bit] = (next[next_bit] + prev[prev_bit]) % MOD; } } } std::mem::swap(&mut prev, &mut next); } println!("{}", prev.iter().sum::() % MOD); }