#include <bits/stdc++.h>
using namespace std;
const int MAXN = 105;
long long mod = 1000000 + 3;
int c, w, h;
void print(int a[MAXN][MAXN]) {
  for (int i = 0; i <= w; i++) {
    for (int j = 0; j <= w; j++) printf("%d ", a[i][j]);
    printf("\n");
  }
  printf("\n");
}
void mult(int res[MAXN][MAXN], int a[MAXN][MAXN], int b[MAXN][MAXN]) {
  for (int i = 0; i < MAXN; i++) {
    for (int j = 0; j < MAXN; j++) {
      res[i][j] = 0;
      for (int k = 0; k < MAXN; k++)
        res[i][j] = (res[i][j] + a[i][k] * 1ll * b[k][j]) % mod;
    }
  }
}
int tmp[MAXN][MAXN];
void binpow(int res[MAXN][MAXN], int a[MAXN][MAXN], int n) {
  for (int i = 0; i < MAXN; i++) {
    for (int j = 0; j < MAXN; j++) res[i][j] = (i == j);
  }
  while (n > 0) {
    if (n % 2) {
      memcpy(tmp, res, sizeof(tmp));
      mult(res, tmp, a);
    }
    memcpy(tmp, a, sizeof(tmp));
    mult(a, tmp, tmp);
    n /= 2;
  }
}
int dp[MAXN][MAXN];
int per[MAXN][MAXN];
int main() {
  cin >> c >> w >> h;
  dp[0][0] = 1;
  for (int i = 0; i < 1; i++) {
    for (int j = 0; j < w; j++)
      dp[i + 1][j + 1] += dp[i][j] * h, per[j][j + 1] += h;
    for (int j = 0; j <= w; j++) dp[i + 1][0] += dp[i][j], per[j][0] += 1;
  }
  binpow(dp, per, c);
  int ans = 0;
  for (int i = 0; i < MAXN; i++) ans = (ans + dp[0][i]) % mod;
  cout << ans << endl;
  return 0;
}
