#include <bits/stdc++.h>
using namespace std;

#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;

typedef long long ll;

template<typename T>
void out(T x) { cout << x << endl; exit(0); }
#define watch(x) cout << (#x) << " is " << (x) << endl

typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> ordered_set;
//*find_by_order
//order_of_key

const int maxn = 5111;
const ll mod = 998244353;

int p,s,r;


// num ways to have i players get total of j points, no one gets over k points
ll go(int i, int j, int k) {
  if (i<0 || j<0 || k<0) return 0;
  if (i==0) {
    if (j>0) return 0;
    assert(j==0);
    return 1;
  }
  ll tot = 0;
  for (int x=0; x<=k; x++) {
    // ith player gets x
    tot += go(i-1,j-x,x);
  }
  return tot;
}

ll modpow(ll a, ll b) {
  ll res = 1;
  while (b>0) {
    if (b%2 == 1) {
      res *= a;
      res %= mod;
    }

    a = a * a; a %= mod;
    b = b / 2;
  }
  return res;
}

ll inv(ll x) {
  return modpow(x, mod-2);
}

int main() {
  ios_base::sync_with_stdio(false); cin.tie(0);  cout.tie(0);

  assert(modpow(2,5)==32);

  cin>>p>>s>>r;
  assert(go(2,2,2)==2);

  ll ans = 0;

  for (int h=r; h<=s; h++) {

    ll total_ways = go(p-1,s-h,s-h);
    ll winning = go(p-1,s-h,h-1);

    // ties
    for (int t=1; (t*h)<=(s-h);t++) {
      // number of tie scenarios where we have a t+1 way tie
      ll cnt = go(p-1-t,s-((t+1)*h),h-1);
      // we expect to win in cnt/(t+1) of them.
      winning += (cnt*inv(t+1));
    }

    ll prob = inv(s-r+1);
    ll cur  = prob*winning*inv(total_ways); cur %= mod;
    ans += cur;
    ans %= mod;    
  }

  cout<<ans<<endl;
  return 0;
}
