#include <bits/stdc++.h>
using namespace std;
inline void read(long long &x) {
  char ch;
  bool flag = false;
  for (ch = getchar(); !isdigit(ch); ch = getchar())
    if (ch == '-') flag = true;
  for (x = 0; isdigit(ch); x = x * 10 + ch - '0', ch = getchar())
    ;
  x = flag ? -x : x;
}
inline void write(long long x) {
  static const long long maxlen = 100;
  static char s[maxlen];
  if (x < 0) {
    putchar('-');
    x = -x;
  }
  if (!x) {
    putchar('0');
    return;
  }
  long long len = 0;
  for (; x; x /= 10) s[len++] = x % 10 + '0';
  for (long long i = len - 1; i >= 0; --i) putchar(s[i]);
}
inline void read(int &x) {
  char ch;
  bool flag = false;
  for (ch = getchar(); !isdigit(ch); ch = getchar())
    if (ch == '-') flag = true;
  for (x = 0; isdigit(ch); x = x * 10 + ch - '0', ch = getchar())
    ;
  x = flag ? -x : x;
}
template <typename T>
T gcd(T m, T n) {
  if (!m || !n) return m | n;
  if (m < 0) m = -m;
  if (n < 0) n = -n;
  int p = 0;
  while (!(m & 1) && !(n & 1)) m >>= 1, n >>= 1, ++p;
  while (n) {
    while (!(m & 1)) m >>= 1;
    while (!(n & 1)) n >>= 1;
    if (m >= n) std::swap(m, n);
    n = (n - m) >> 1;
  }
  return m << p;
}
template <typename T>
std::pair<T, std::pair<T, T> > exgcd(T m, T n) {
  using std::make_pair;
  T x = 0, y = 1, xp = 1, yp = 0, xt, yt;
  for (T r = m % n, q = m / n; r;) {
    xt = xp - q * x, xp = x, x = xt;
    yt = yp - q * y, yp = y, y = yt;
    m = n, n = r, r = m % n, q = m / n;
  }
  return make_pair(n, make_pair(x, y));
}
template <typename T>
T modinv(T m, T n) {
  std::pair<T, std::pair<T, T> > gxy = exgcd(m, n);
  T loop = n / gxy.first;
  T inv = gxy.second.first;
  inv = inv % loop;
  return inv < 0 ? inv + loop : inv;
}
const long long MAX_S = 5500;
int C[MAX_S][MAX_S];
const int P = 998244353;
int get_C(int n, int m) {
  if (n < m) return 0;
  if (n < 0) return 0;
  if (m < 0) return 0;
  return C[n][m];
}
void prepare() {
  C[0][0] = 1;
  for (int i = 1; i < MAX_S; i++) {
    for (int j = 0; j <= i; j++) C[i][j] = (C[i - 1][j - 1] + C[i - 1][j]) % P;
  }
}
int get_ans(int n, int s, int lim) {
  if (n == 0) return (s == 0) ? 1 : 0;
  int ans = get_C(s + n - 1, n - 1);
  int op = -1;
  for (int m = 1; m <= n; m++) {
    ans = ((ans +
            op * get_C(s - (lim + 1) * m + n - 1, n - 1) * get_C(n, m) % P) %
               P +
           P) %
          P;
    op = -op;
  }
  return ans;
}
int n, s, r;
int main() {
  prepare();
  read(n);
  read(s);
  read(r);
  int ans = 0;
  for (int i = r; i <= s; i++)
    for (int j = 1; (i * j <= s) && (j <= n); j++) {
      ans = ((ans + 1ll * get_ans(n - j, s - i * j, i - 1) *
                        get_C(n - 1, j - 1) % P * modinv(j, P) % P) %
                 P +
             P) %
            P;
    }
  ans = 1ll * ans * modinv(get_C((s - r) + n - 1, n - 1), P) % P;
  cout << ans << endl;
  return 0;
}
