#include <bits/stdc++.h>
using namespace std;
string to_string(const string& str) { return str; }
template <typename T>
string to_string(const set<T>& mys) {
  if (mys.empty()) return "{}";
  string ret = "{";
  for (auto el : mys) ret += to_string(el) + ", ";
  ret.pop_back(), ret.pop_back();
  ret += "}";
  return ret;
}
template <typename T>
string to_string(const pair<T, T>& pr) {
  return "(" + to_string(pr.first) + "," + to_string(pr.second) + ")";
}
template <typename T>
string to_string(const vector<T>& vc, int w) {
  if (vc.empty()) return "";
  if (w + 1 == vc.size()) return to_string(vc[w]);
  return to_string(vc[w]) + "," + to_string(vc, w + 1);
}
template <typename T>
string to_string(const vector<T>& vc) {
  return "{" + to_string(vc, 0) + "}";
}
void debug_out() { cerr << endl; }
template <typename Head, typename... Tail>
void debug_out(Head H, Tail... T) {
  cerr << " " << to_string(H);
  debug_out(T...);
}
class DebugStream {
} LOG;
template <typename T>
DebugStream& operator<<(DebugStream& s, const T&) {
  return s;
}
mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count());
const int maxN = 1e2 + 9, maxV = 1e6 + 9, MOD = 998244353, SQ = 335, lg = 20,
          bs = 29;
long long ncr[maxN][maxN], invs[maxN];
inline void add(int& a, int b) {
  a += b;
  if (a >= MOD) a -= MOD;
}
inline void sub(int& a, int b) {
  a -= b;
  if (a < 0) a += MOD;
}
long long fastPow(long long a, long long b) {
  long long ret = 1;
  while (b) {
    if (b & 1) ret = ret * a % MOD;
    a = a * a % MOD;
    b >>= 1;
  }
  return ret;
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  clock_t begi = clock();
  for (int i = 1; i < maxN; i++) invs[i] = fastPow(i, MOD - 2);
  for (int i = 0; i < maxN; i++)
    for (int j = ncr[i][0] = 1; j <= i; j++)
      ncr[i][j] = (ncr[i - 1][j] + ncr[i - 1][j - 1]) % MOD;
  int p, s, r;
  cin >> p >> s >> r;
  if (s == 0) {
    cout << invs[p] << '\n';
    exit(0);
  }
  int ans = 0;
  auto slv = [&](int u, int totS, vector<int>& dp) {
    int cnt = 0, tmp;
    for (int i = max(0, totS - u + 1); i <= totS; i++) add(cnt, dp[i]);
    for (int i = totS; i >= 0; i--) {
      if (i - u >= 0) add(cnt, dp[i - u]);
      tmp = cnt;
      sub(cnt, dp[i]);
      dp[i] = tmp;
    }
  };
  for (int u = max(1, r); u <= s; u++) {
    int totS = s - u;
    vector<int> dp(totS + 1);
    dp[0] = 1;
    for (int x = 0; x < p; x++) {
      int rst = p - x;
      if (rst * u <= s) {
        add(ans, dp[s - rst * u] * invs[rst] % MOD * ncr[p - 1][rst - 1] % MOD);
      }
      slv(u - 1, totS, dp);
    }
  }
  vector<int> ovr(s + 1);
  for (int i = r; i <= s; i++) ovr[i] = 1;
  for (int x = 1; x < p; x++) slv(s, s, ovr);
  42;
  cout << ans * fastPow(ovr[s], MOD - 2) % MOD << '\n';
  auto elapsed = double(clock() - begi) / CLOCKS_PER_SEC;
  42;
}
