#include <bits/stdc++.h>
using namespace std;
int C, W, H;
struct matrix {
  int a[105][105];
  int h, l;
} zero, ans, a;
matrix operator*(matrix a, matrix b) {
  matrix c = zero;
  c.h = a.h;
  c.l = b.l;
  for (int i = 1; i <= c.h; i++) {
    for (int j = 1; j <= c.l; j++) {
      for (int k = 1; k <= a.l; k++) {
        c.a[i][j] =
            (c.a[i][j] + 1ll * a.a[i][k] * b.a[k][j] % 1000003) % 1000003;
      }
    }
  }
  return c;
}
int main() {
  scanf("%d%d%d", &C, &W, &H);
  ans.h = W + 1;
  ans.l = 1;
  ans.a[1][1] = 1;
  a.h = W + 1;
  a.l = W + 1;
  int now = 1;
  for (int i = 1; i <= W + 1; i++) {
    a.a[1][i] = now;
    now = 1ll * now * H % 1000003;
  }
  for (int i = 1; i <= W; i++) {
    a.a[i + 1][i] = 1;
  }
  C++;
  while (C) {
    if (C & 1) ans = a * ans;
    a = a * a;
    C >>= 1;
  }
  printf("%d\n", ans.a[1][1]);
  return 0;
}
