#include <bits/stdc++.h>
using namespace std;
const int mo = 1000003;
struct Mat {
  int a[105][105];
  int r, c;
} A, C;
Mat operator*(Mat x, Mat y) {
  Mat res;
  memset(res.a, 0, sizeof res.a);
  res.r = x.r;
  res.c = y.c;
  for (int i = 1; i <= x.r; ++i)
    for (int j = 1; j <= y.c; ++j)
      for (int k = 1; k <= x.c; ++k) {
        res.a[i][j] += 1ll * x.a[i][k] * y.a[k][j] % mo;
        res.a[i][j] %= mo;
      }
  return res;
}
Mat pwr(Mat x, Mat y, int p) {
  for (; p; p >>= 1, y = y * y)
    if (p & 1) x = x * y;
  return x;
}
int main() {
  int co, wi, hi;
  scanf("%d%d%d", &co, &wi, &hi);
  A.r = A.c = C.r = C.c = wi + 1;
  memset(A.a, 0, sizeof A.a);
  memset(C.a, 0, sizeof C.a);
  for (int i = 1; i <= wi + 1; ++i) C.a[i][1] = 1;
  for (int i = 1; i <= wi + 1; ++i) C.a[i][i + 1] = hi;
  for (int i = 1; i <= wi + 1; ++i) A.a[i][1] = 1;
  A = pwr(A, C, co);
  int ans = 0;
  for (int i = 1; i <= wi + 1; ++i) (ans += A.a[1][i]) %= mo;
  cout << ans << endl;
  return 0;
}
