func_code_string: #include <bits/stdc++.h>   using namespace std;   const int inf = 0x3f3f3f3f, mod = 998244353;   const long long INF = 0x3f3f3f3f3f3f3f3fLL;   const double pi = acosl(-1.), eps = 1e-9;   inline void sum(int &a, int b) {     a += b;     if (a >= mod) a -= mod;   }   inline int power(int a, int b, int m = mod, int ans = 1) {     for (; b; b >>= 1, a = 1LL * a * a % m)       if (b & 1) ans = 1LL * ans * a % m;     return ans;   }   const int NN = 10010;   int ch[NN], rch[NN];   int c(int n, int m) {     if (n < m) return 0;     if (!m) return 1;     return (long long)ch[n] * rch[n - m] % mod * rch[m] % mod;   }   int dp[111][5555];   int s[111][5555];   int main() {     ch[0] = 1;     for (int i = 1; i < NN; i++) ch[i] = (long long)ch[i - 1] * i % mod;     rch[NN - 1] = power(ch[NN - 1], mod - 2);     for (int i = NN - 1; i; i--) {       rch[i - 1] = (long long)rch[i] * i % mod;     }     int N, S, R;     cin >> N >> S >> R;     if (N == 1) {       puts( 1 );       return 0;     }     int tmp;     if (R == 0) {       tmp = c(N + S - 1, N - 1);     } else {       dp[0][0] = 1;       for (int i = 0; i <= S; i++) s[0][i] = 1;       for (int i = 1; i <= N; i++) {         for (int j = 0; j <= S; j++) {           dp[i][j] = s[i - 1][j];           if (j >= R) dp[i][j] -= s[i - 1][j - R];           if (dp[i][j] < 0) dp[i][j] += mod;         }         s[i][0] = 1;         for (int j = 1; j <= S; j++) {           s[i][j] = s[i][j - 1] + dp[i][j];           if (s[i][j] >= mod) s[i][j] -= mod;         }       }       tmp = c(S + N - 1, N - 1) - dp[N][S];       if (tmp < 0) tmp += mod;     }     tmp = (long long)tmp * power(N, mod - 2) % mod;     int tot = 0;     for (int i = R; i <= S; i++) {       sum(tot, c(S - i + N - 1 - 1, N - 2));     }     tot = power(tot, mod - 2);     cout << (long long)tmp * tot % mod << endl;     return 0;   }   