/**
 * BaZ :D
 */
import java.util.*;
import java.io.*;
import static java.lang.Math.*;
public class Main
{
    static Reader scan;
    static PrintWriter pw;
    static long MOD = 998_244_353;
    static long INF = 1_000_000_000_000_000_000L;
    static long inf = 2_000_000_000;
    public static void main(String[] args) {
        new Thread(null,null,"BaZ",1<<25)
        {
            public void run()
            {
                try
                {
                    solve();
                }
                catch(Exception e)
                {
                    e.printStackTrace();
                    System.exit(1);
                }
            }
        }.start();
    }
    static long fact[] = new long[100001], invfact[] = new long[100001],res;
    static void solve() throws IOException
    {
        scan = new Reader();
        pw = new PrintWriter(System.out,true);
        StringBuilder sb = new StringBuilder();
        fact[0] = invfact[0] = 1;
        for(int i=1;i<=100000;++i) {
            fact[i] = (fact[i-1]*i)%MOD;
            invfact[i] = modpow(fact[i], MOD-2, MOD);
        }
        int n = ni(),s = ni(), r = ni();
        long dr = nCr(s+n-r-1, n-1);
        long nr = 0;
        for(int highest_score=r;highest_score<=s;++highest_score) {
            for(int number_of_players_who_have_score_equal_to_highest_score=1;number_of_players_who_have_score_equal_to_highest_score<=n;++number_of_players_who_have_score_equal_to_highest_score) {
                int sumleft = s - number_of_players_who_have_score_equal_to_highest_score*highest_score;
                int number_of_players_left = n-number_of_players_who_have_score_equal_to_highest_score;
                long temp = nCr(n-1, number_of_players_who_have_score_equal_to_highest_score-1) * calc(number_of_players_left,sumleft,highest_score-1);
                //pl("highest score : "+highest_score+" number of players having the highest score : "+number_of_players_who_have_score_equal_to_highest_score+" ways : "+temp);
                temp%=MOD;
                nr+=(temp*modpow(number_of_players_who_have_score_equal_to_highest_score, MOD-2, MOD))%MOD;
                nr%=MOD;
            }
        }
        //pl("nr : "+nr+" dr : "+dr);
        long inv = modpow(dr, MOD-2, MOD);
        pl((nr*inv)%MOD);
        pw.flush();
        pw.close();
    }

    /**
      number of ways to sum s, using n integer numbers, with each number <=r
     */
    static long calc(int n, int s, int r) {
        if(s>n*r) {
            //pl("in calc n : "+n+" s : "+s+" r : "+r+" returning 0");
            return 0;
        }
        if(s==0) {
            return 1;
        }
        //pl("yaha2");
        long ways = nCr(s+n-1, n-1);
        long invalid = 0;
        for(int i=1;i<=n;++i) {
            if(i%2==0) {
                invalid-=(nCr(n,i) * nCr(s-i*(r+1)+n-1, n-1))%MOD;
                invalid+=MOD;
                invalid%=MOD;
            }
            else {
                invalid+=(nCr(n,i) * nCr(s-i*(r+1)+n-1, n-1))%MOD;
                invalid%=MOD;
            }
        }
        ways = (ways-invalid+MOD)%MOD;
        //pl("in calc n : "+n+" s : "+s+" r : "+r+" returning : "+ways);
        return ways;
    }
    static long nCr(int n, int r) {
        if(r>n || n<0) {
            return 0;
        }
        return (fact[n] * ((invfact[r]*invfact[n-r])%MOD))%MOD;
    }
    static long modpow(long x,long y,long mod)
    {
        res = 1;
        while(y>0)
        {
            if((y&1)==1)
                res = (res*x)%mod;
            y>>=1;
            x = (x*x)%mod;
        }
        return res;
    }
    static int ni() throws IOException
    {
        return scan.nextInt();
    }
    static long nl() throws IOException
    {
        return scan.nextLong();
    }
    static double nd() throws IOException
    {
        return scan.nextDouble();
    }
    static void pl()
    {
        pw.println();
    }
    static void p(Object o)
    {
        pw.print(o+" ");
    }
    static void pl(Object o)
    {
        pw.println(o);
    }
    static void psb(StringBuilder sb)
    {
        pw.print(sb);
    }
    static void pa(String arrayName, Object arr[])
    {
        pl(arrayName+" : ");
        for(Object o : arr)
            p(o);
        pl();
    }
    static void pa(String arrayName, int arr[])
    {
        pl(arrayName+" : ");
        for(int o : arr)
            p(o);
        pl();
    }
    static void pa(String arrayName, long arr[])
    {
        pl(arrayName+" : ");
        for(long o : arr)
            p(o);
        pl();
    }
    static void pa(String arrayName, double arr[])
    {
        pl(arrayName+" : ");
        for(double o : arr)
            p(o);
        pl();
    }
    static void pa(String arrayName, char arr[])
    {
        pl(arrayName+" : ");
        for(char o : arr)
            p(o);
        pl();
    }
    static void pa(String listName, List list)
    {
        pl(listName+" : ");
        for(Object o : list)
            p(o);
        pl();
    }
    static void pa(String arrayName, Object[][] arr) {
        pl(arrayName+" : ");
        for(int i=0;i<arr.length;++i) {
            for(Object o : arr[i])
                p(o);
            pl();
        }
    }
    static void pa(String arrayName, int[][] arr) {
        pl(arrayName+" : ");
        for(int i=0;i<arr.length;++i) {
            for(int o : arr[i])
                p(o);
            pl();
        }
    }
    static void pa(String arrayName, long[][] arr) {
        pl(arrayName+" : ");
        for(int i=0;i<arr.length;++i) {
            for(long o : arr[i])
                p(o);
            pl();
        }
    }
    static void pa(String arrayName, char[][] arr) {
        pl(arrayName+" : ");
        for(int i=0;i<arr.length;++i) {
            for(char o : arr[i])
                p(o);
            pl();
        }
    }
    static void pa(String arrayName, double[][] arr) {
        pl(arrayName+" : ");
        for(int i=0;i<arr.length;++i) {
            for(double o : arr[i])
                p(o);
            pl();
        }
    }
    static class Reader {
        final private int BUFFER_SIZE = 1 << 16;
        private DataInputStream din;
        private byte[] buffer;
        private int bufferPointer, bytesRead;

        public Reader() {
            din = new DataInputStream(System.in);
            buffer = new byte[BUFFER_SIZE];
            bufferPointer = bytesRead = 0;
        }

        public Reader(String file_name) throws IOException {
            din = new DataInputStream(new FileInputStream(file_name));
            buffer = new byte[BUFFER_SIZE];
            bufferPointer = bytesRead = 0;
        }

        public String readLine() throws IOException {
            byte[] buf = new byte[64];
            int cnt = 0, c;
            while ((c = read()) != -1) {
                if (c == '\n') break;
                buf[cnt++] = (byte) c;
            }
            return new String(buf, 0, cnt);
        }

        public int nextInt() throws IOException {
            int ret = 0;
            byte c = read();
            while (c <= ' ') c = read();
            boolean neg = (c == '-');
            if (neg) c = read();
            do {
                ret = ret * 10 + c - '0';
            } while ((c = read()) >= '0' && c <= '9');
            if (neg) return -ret;
            return ret;
        }

        public long nextLong() throws IOException {
            long ret = 0;
            byte c = read();
            while (c <= ' ') c = read();
            boolean neg = (c == '-');
            if (neg) c = read();
            do {
                ret = ret * 10 + c - '0';
            } while ((c = read()) >= '0' && c <= '9');
            if (neg) return -ret;
            return ret;
        }

        public double nextDouble() throws IOException {
            double ret = 0, div = 1;
            byte c = read();
            while (c <= ' ') c = read();
            boolean neg = (c == '-');
            if (neg) c = read();
            do {
                ret = ret * 10 + c - '0';
            } while ((c = read()) >= '0' && c <= '9');
            if (c == '.') while ((c = read()) >= '0' && c <= '9') ret += (c - '0') / (div *= 10);
            if (neg) return -ret;
            return ret;
        }

        private void fillBuffer() throws IOException {
            bytesRead = din.read(buffer, bufferPointer = 0, BUFFER_SIZE);
            if (bytesRead == -1) buffer[0] = -1;
        }

        private byte read() throws IOException {
            if (bufferPointer == bytesRead) fillBuffer();
            return buffer[bufferPointer++];
        }

        public void close() throws IOException {
            if (din == null) return;
            din.close();
        }
    }
}