#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:256000000")
using namespace std;
mt19937 ggen;
const long long MOD = 1000003;
inline long long add(long long a, long long b, long long m = MOD) {
  long long res = a + b;
  if (res >= m) res -= m;
  return res;
}
inline long long sub(long long a, long long b, long long m = MOD) {
  long long res = a - b;
  if (res < 0) res += m;
  return res;
}
inline long long mul(long long a, long long b, long long m = MOD) {
  return (a * b) % m;
}
inline long long binpow(long long a, long long p, long long m = MOD) {
  if (m == 1) return 0;
  long long res = 1;
  while (p) {
    if (p & 1) res = mul(res, a, m);
    a = mul(a, a, m);
    p >>= 1;
  }
  return res;
}
inline long long obr(long long a, long long m = MOD) {
  return binpow(a, m - 2, m);
}
struct matr {
  long long a[110][110];
  int n;
  matr(int n = 0) : n(n) { memset(a, 0, sizeof a); }
};
matr operator*(const matr &a, const matr &b) {
  int n = a.n;
  matr res(n);
  for (int i = 0; i < n; i++)
    for (int j = 0; j < n; j++)
      for (int k = 0; k < n; k++)
        res.a[i][j] = add(res.a[i][j], mul(a.a[i][k], b.a[k][j]));
  return res;
}
matr binpow(matr a, int p) {
  int n = a.n;
  matr res(n);
  for (int i = 0; i < n; i++) res.a[i][i] = 1;
  while (p) {
    if (p & 1) res = res * a;
    p >>= 1;
    a = a * a;
  }
  return res;
}
int c, w, h;
void solve() {
  cin >> c >> w >> h;
  matr f(110);
  for (int i = 0; i <= w; i++) {
    f.a[0][i] = add(f.a[0][i], 1);
    if (i != w) f.a[i + 1][i] = add(f.a[i + 1][i], h);
  }
  f = binpow(f, c);
  long long res = 0;
  for (int i = 0; i <= min(c, w); i++) res = add(res, f.a[i][0]);
  cout << res;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  srand(1313);
  ggen = mt19937(13);
  solve();
  return 0;
}
