output_description: Print the answer.
  
  * * *
input_description: Input is given from Standard Input in the following format:
  
      
      
      N M K
attempt: import sys
  
  
  def input():
      return sys.stdin.readline().strip()
  
  
  def list2d(a, b, c):
      return [[c] * b for i in range(a)]
  
  
  def list3d(a, b, c, d):
      return [[[d] * c for j in range(b)] for i in range(a)]
  
  
  def list4d(a, b, c, d, e):
      return [[[[e] * d for j in range(c)] for j in range(b)] for i in range(a)]
  
  
  def ceil(x, y=1):
      return int(-(-x // y))
  
  
  def INT():
      return int(input())
  
  
  def MAP():
      return map(int, input().split())
  
  
  def LIST(N=None):
      return list(MAP()) if N is None else [INT() for i in range(N)]
  
  
  def Yes():
      print("Yes")
  
  
  def No():
      print("No")
  
  
  def YES():
      print("YES")
  
  
  def NO():
      print("NO")
  
  
  sys.setrecursionlimit(10**9)
  INF = 10**18
  MOD = 998244353
  
  
  class ModTools:
      """階乗たくさん使う時用のテーブル準備"""
  
      def __init__(self, MAX, MOD):
          """MAX：階乗に使う数値の最大以上まで作る"""
  
          MAX += 1
          self.MAX = MAX
          self.MOD = MOD
          factorial = [1] * MAX
          factorial[0] = factorial[1] = 1
          for i in range(2, MAX):
              factorial[i] = factorial[i - 1] * i % MOD
          inverse = [1] * MAX
          inverse[MAX - 1] = pow(factorial[MAX - 1], MOD - 2, MOD)
          for i in range(MAX - 2, -1, -1):
              inverse[i] = inverse[i + 1] * (i + 1) % MOD
          self.fact = factorial
          self.inv = inverse
  
      def nCr(self, n, r):
          """組み合わせの数"""
  
          if n < r:
              return 0
          r = min(r, n - r)
          numerator = self.fact[n]
          denominator = self.inv[r] * self.inv[n - r] % self.MOD
          return numerator * denominator % self.MOD
  
  
  N, M, K = MAP()
  
  mt = ModTools(N, MOD)
  ans = 0
  for k in range(K + 1):
      ans += M * pow(M - 1, N - k - 1, MOD) * mt.nCr(N - 1, k)
      ans %= MOD
  print(ans)
  
problem_description: Statement
  
  There are N blocks arranged in a row. Let us paint these blocks.
  
  We will consider two ways to paint the blocks different if and only if there
  is a block painted in different colors in those two ways.
  
  Find the number of ways to paint the blocks under the following conditions:
  
    * For each block, use one of the M colors, Color 1 through Color M, to paint it. It is not mandatory to use all the colors.
    * There may be at most K pairs of adjacent blocks that are painted in the same color.
  
  Since the count may be enormous, print it modulo 998244353.
samples: [{"input": "3 2 1", "output": "6\n    \n\nThe following ways to paint the blocks satisfy the conditions: `112`, `121`,\n`122`, `211`, `212`, and `221`. Here, digits represent the colors of the\nblocks.\n\n* * *"}, {"input": "100 100 0", "output": "73074801\n    \n\n* * *"}, {"input": "60522 114575 7559", "output": "479519525"}]