#include <bits/stdc++.h>
const int W = 102;
using namespace std;
struct matrix {
  int a[W][W], b[W][W];
  void operator*=(matrix A) {
    memset(b, 0, sizeof(b));
    for (int i = 0; i < W; i++)
      for (int h = 0; h < W; h++)
        for (int j = 0; j < W; j++)
          b[i][h] = (b[i][h] + 1LL * a[i][j] * A.a[j][h]) % 1000003;
    memcpy(a, b, sizeof(b));
  }
} A, b;
int c, w, h;
int main() {
  scanf("%d %d %d", &c, &w, &h);
  A.a[0][0] = b.a[0][0] = 1;
  for (int i = 1, f = h; i <= w; i++) {
    A.a[0][i] = f;
    A.a[i][i - 1] = 1;
    f = 1LL * f * h % 1000003;
  }
  while (c) {
    if (c & 1) b *= A;
    A *= A, c >>= 1;
  }
  printf("%d", (b.a[0][0] + b.a[0][1]) % 1000003);
}
