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()