import sys from collections import defaultdict MOD = 998244353 def get_distribution(H, K): dist = defaultdict(int) s = H - K + 1 # Case 1: l <= K-1 if s >= K - 1: for a in range(1, K): dist[a] += 1 else: for a in range(1, s + 1): dist[a] += 1 remaining = (K - 1) - s if remaining > 0: dist[s] += remaining # Case 2a: a = K t = max(0, H - 2 * K + 2) if t > 0: dist[K] += t # Case 2b: a_val from 1 to len_case2b start = max(K, H - K + 2) end = H if start <= end: len_case2b = end - start + 1 for a in range(1, len_case2b + 1): dist[a] += 1 return dist def main(): H, W, N, K = map(int, sys.stdin.readline().split()) # Compute row distribution row_dist = get_distribution(H, K) # Compute column distribution col_dist = get_distribution(W, K) # Compute T and inv_T Th = (H - K + 1) % MOD Tw = (W - K + 1) % MOD T = (Th * Tw) % MOD if T == 0: print(0) return inv_T = pow(T, MOD - 2, MOD) # Calculate the total expectation total = 0 # Precompute pow for each unique c_val pow_cache = {} for a_val, a_cnt in row_dist.items(): for b_val, b_cnt in col_dist.items(): c_val = a_val * b_val numerator = (c_val % MOD) * inv_T % MOD prob_not = (1 - numerator) % MOD if prob_not in pow_cache: pow_val = pow_cache[prob_not] else: pow_val = pow(prob_not, N, MOD) pow_cache[prob_not] = pow_val term = (1 - pow_val) % MOD cnt = (a_cnt * b_cnt) % MOD total = (total + term * cnt) % MOD print(total % MOD) if __name__ == "__main__": main()