#include <bits/stdc++.h>
using namespace std;
const int mx = 110, Mod = 1e6 + 3;
int C, W, H;
struct Matrix {
  int val[mx][mx];
  int n;
  Matrix(int _n = mx, int _base = 0) {
    n = _n;
    for (int i = 0; i < n; i++)
      for (int j = 0; j < n; j++) val[i][j] = (i == j ? _base : 0);
  }
  int* operator[](int x) { return val[x]; }
};
Matrix operator*(Matrix A, Matrix B) {
  Matrix res(A.n);
  for (int i = 0; i < res.n; i++)
    for (int j = 0; j < res.n; j++)
      for (int k = 0; k < res.n; k++)
        res[i][k] = (0LL + res[i][k] + 1LL * A[i][j] * B[j][k]) % Mod;
  return res;
}
Matrix operator^(Matrix A, long long int B) {
  Matrix res(A.n, 1);
  while (B) {
    if (B & 1) res = res * A;
    A = A * A;
    B >>= 1;
  }
  return res;
}
int main() {
  scanf("%d%d%d", &C, &W, &H);
  Matrix res(W + 1);
  for (int i = 0; i <= W; i++) res[0][i] = 1, res[i + 1][i] = H;
  res = res ^ C;
  int ans = 0;
  for (int i = 0; i <= W; i++) ans = (0LL + ans + res[i][0]) % Mod;
  printf("%d\n", ans);
  return 0;
}
