#include <bits/stdc++.h>
using namespace std;
const int MAXW = 110;
const int MAXH = 110;
int C, W, H;
long long dp[MAXW];
struct matrix {
  long long d[MAXW][MAXW];
};
matrix mmul(matrix &a, matrix &b) {
  matrix c;
  for (int i = 0; i <= W; i++)
    for (int j = 0; j <= W; j++) {
      c.d[i][j] = 0;
      for (int k = 0; k <= W; k++) c.d[i][j] += a.d[i][k] * b.d[k][j] % 1000003;
      c.d[i][j] %= 1000003;
    }
  return c;
}
matrix mpow(matrix &a, int e) {
  matrix r;
  for (int i = 0; i <= W; i++) {
    for (int j = 0; j <= W; j++) r.d[i][j] = 0;
    r.d[i][i] = 1;
  }
  matrix p;
  for (int i = 0; i <= W; i++)
    for (int j = 0; j <= W; j++) p.d[i][j] = a.d[i][j];
  while (e) {
    if (e & 1) r = mmul(r, p);
    p = mmul(p, p);
    e >>= 1;
  }
  return r;
}
int main() {
  cin >> C >> W >> H;
  matrix a;
  for (int i = 0; i <= W; i++) {
    if (i == 0) {
      for (int j = 0; j <= W; j++) a.d[i][j] = 1;
    } else {
      for (int j = 0; j <= W; j++) a.d[i][j] = 0;
      a.d[i][i - 1] = H;
    }
  }
  matrix r = mpow(a, C);
  long long sum = 0;
  for (int i = 0; i <= W; i++) sum += r.d[i][0];
  sum %= 1000003;
  cout << sum << endl;
}
