using System;
using System.Collections.Generic;
using System.Linq;

namespace ConsoleApp32
{
    class Program
    {
        static void Main(string[] args)
        {
            var buff = Console.ReadLine().Split(' ').Select(int.Parse).ToArray();

            int N = buff[0];
            int M = buff[1];
            int K = buff[2];
            const int mod = 998244353;

            var list = Pattern(N, K, mod);
            long ans = 0;
            for(int i = 0; i <= K; i++)
            {
                ans += Paint(i, list[i], N, M, mod);
                ans %= mod;
            }

            Console.WriteLine(ans);

        }

        static List<long> Pattern(int N, int K, int mod)
        {
            var list = new List<long>();
            list.Add(1);
            var factreal = Factreal(K, mod);
            var list2 = Permutation(N - 1, K, mod);
            for(int i = 1; i <= K; i++)
            {
                long value = 1;
                value = list2[i];
                value *= Modinv(factreal[i - 1], mod);
                value %= mod;
                list.Add(value);
            }
            return list;
        }

        static long Paint(long n_same, long pattern, int N, int M, int mod)
        {
            long value = M;
            value *= PowerMod(M - 1, N - n_same - 1, mod);
            value %= mod;
            value *= pattern;
            value %= mod;

            return value;
        }

        static List<long> Factreal(long a, long mod)
        {
            var list = new List<long>();
            long value = 1;
            int i = 1;
            while(i <= a)
            {
                value *= i++;
                value %= mod;
                list.Add(value);
            }
            return list;
        }

        static long Modinv(long a, long m)
        {
            long b = m;
            long u = 1;
            long v = 0;
            while (b != 0)
            {
                long t = a / b;
                a -= t * b;
                (a, b) = Swap(a, b);
                u -= t * v;
                (u, v) = Swap(u, v);
            }
            u %= m;
            if(u < 0)
            {
                u += m;
            }
            return u;
        }

        static (long a, long b) Swap(long a, long b)
        {
            long temp = a;
            a = b;
            b = temp;

            return (a, b);
        }

        static long PowerMod(long ba, long exp, long mod)
        {
            
            long result = 1;
            while(exp != 0)
            {
                if((exp % 2) == 1)
                {
                    result *= ba;
                    exp--;
                    result %= mod;
                }
                else
                {
                    ba *= ba;
                    exp /= 2;
                    ba %= mod;
                }

            }
            return result;
        }
        static List<long> Permutation(long total, long pick, long mod)
        {
            var list = new List<long>();
            list.Add(1);
            long value = 1;
            for(int i = 0; i < pick; i++)
            {
                value *= total - i;
                value %= mod;
                list.Add(value);
            }

            return list;
        }
    }
}


Measured memory_bytes: 35304