import sys MOD = 998244353 def main(): input = sys.stdin.readline N, P, Q = map(int, input().split()) # dp[p][q]: # 現在の長さで、総和が (p, q) であり、 # これまでの全ての prefix 条件を満たす列の個数 dp = [[0] * (Q + 1) for _ in range(P + 1)] dp[0][0] = 1 ans = [] for _ in range(N): # 2 次元累積和 pref を作る pref = [[0] * (Q + 1) for _ in range(P + 1)] for p in range(P + 1): row_sum = 0 pref_row = pref[p] dp_row = dp[p] if p > 0: pref_prev = pref[p - 1] for q in range(Q + 1): row_sum += dp_row[q] if row_sum >= MOD: row_sum -= MOD pref_row[q] = pref_prev[q] + row_sum if pref_row[q] >= MOD: pref_row[q] -= MOD else: for q in range(Q + 1): row_sum += dp_row[q] if row_sum >= MOD: row_sum -= MOD pref_row[q] = row_sum # 次の長さの dp を作る ndp = [[0] * (Q + 1) for _ in range(P + 1)] for p in range(P + 1): # 条件 Q*p >= P*q を満たす q の範囲だけ代入してもよい for q in range(Q + 1): if Q * p >= P * q: # 最後の項 (A_i, B_i) を自由に足す。 # 直前の総和を (x, y) とすると x<=p, y<=q。 # prefix 条件は新しい末尾 prefix だけ見ればよい。 ndp[p][q] = pref[p][q] dp = ndp ans.append(dp[P][Q] % MOD) print(*ans, sep="\n") if __name__ == "__main__": main()