#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1e6 + 3;
int C, W, H;
struct A {
  int num[101][101];
  A operator*(const A &p) const {
    A R;
    for (int Wi = 0; Wi <= W; Wi++)
      for (int Wj = 0; Wj <= W; Wj++) R.num[Wi][Wj] = 0;
    for (int Wk = 0; Wk <= W; Wk++)
      for (int Wi = 0; Wi <= W; Wi++)
        for (int Wj = 0; Wj <= W; Wj++) {
          R.num[Wi][Wj] += (long long)num[Wi][Wk] * p.num[Wk][Wj] % MOD;
          R.num[Wi][Wj] %= MOD;
        }
    return R;
  }
};
A I, X, Y;
A pow(A &X, int n) {
  if (n == 0) return I;
  A p = pow(X, n / 2);
  if (n & 1)
    return p * p * X;
  else
    return p * p;
}
int v[101];
int main() {
  scanf("%d %d %d", &C, &W, &H);
  if (W > C) W = C;
  for (int Wi = 0, val = 1; Wi <= W; Wi++) {
    v[Wi] = val;
    val *= H;
    val %= MOD;
  }
  for (int Wi = 0; Wi <= W; Wi++)
    for (int Wj = 0; Wj <= W; Wj++)
      if (Wi == Wj)
        I.num[Wi][Wj] = 1;
      else
        I.num[Wi][Wj] = 0;
  for (int Wi = 0; Wi < W; Wi++)
    for (int Wj = 0; Wj <= W; Wj++)
      if (Wi + 1 == Wj)
        X.num[Wi][Wj] = 1;
      else
        X.num[Wi][Wj] = 0;
  for (int Wj = 0; Wj <= W; Wj++) X.num[W][Wj] = v[W - Wj];
  Y = pow(X, C - W);
  long long ans = 0;
  for (int Wi = 0, val = 1; Wi <= W; Wi++) {
    ans += (long long)val * Y.num[W][Wi] % MOD, ans %= MOD;
    val *= H + 1;
    val %= MOD;
  }
  printf("%lld\n", ans);
}
