#include <bits/stdc++.h>
using namespace std;
const int Mod = 1000003;
class mint {
 public:
  int first;
  mint(int second = 0) : first(second) {}
};
mint operator+(mint a, mint b) {
  a.first += b.first;
  if (a.first >= Mod) a.first -= Mod;
  return a;
}
mint operator*(mint a, mint b) {
  return (int)(((long long)a.first * b.first) % Mod);
}
void operator+=(mint &a, mint b) {
  a.first += b.first;
  if (a.first >= Mod) a.first -= Mod;
}
void operator*=(mint &a, mint b) {
  a.first = (int)(((long long)a.first * b.first) % Mod);
}
class matrix {
 public:
  mint mat[105][105];
  matrix(int first = 0) {
    for (int i = (int)(0); i < (int)(105); ++i)
      for (int j = (int)(0); j < (int)(105); ++j) mat[i][j] = first * (i == j);
  }
  mint *operator[](int first) { return mat[first]; }
};
matrix operator*(matrix a, matrix b) {
  matrix c;
  for (int i = (int)(0); i < (int)(105); ++i)
    for (int j = (int)(0); j < (int)(105); ++j)
      for (int k = (int)(0); k < (int)(105); ++k) c[i][j] += a[i][k] * b[k][j];
  return c;
}
void operator*=(matrix &a, matrix b) { a = a * b; }
mint pot(mint a, int b) {
  mint r = 1;
  while (b) {
    if (b & 1) r *= a;
    a *= a;
    b >>= 1;
  }
  return r;
}
matrix pot(matrix a, int b) {
  matrix r = 1;
  while (b) {
    if (b & 1) r *= a;
    a *= a;
    b >>= 1;
  }
  return r;
}
inline mint f(int w, int h) {
  if (w < 0 || h < 0) return 0;
  return pot(mint(h + 1), w);
}
inline mint g(int w, int h) { return f(w, h - 1); }
int c, w, h;
int main() {
  ios_base::sync_with_stdio(false);
  cin >> c >> w >> h;
  vector<mint> start(w + 1);
  for (int i = (int)(0); i < (int)(w + 1); ++i) start[i] = f(i, h);
  if (c < w + 1) {
    cout << start[c].first << endl;
    return 0;
  }
  matrix bla;
  for (int i = (int)(0); i < (int)(w + 1); ++i)
    for (int j = (int)(0); j < (int)(w); ++j) bla[i][j] = (i - 1 == j);
  for (int i = (int)(0); i < (int)(w + 1); ++i) bla[w - i][w] = g(i, h);
  bla = pot(bla, c - w);
  mint r = 0;
  for (int i = (int)(0); i < (int)(w + 1); ++i) r += start[i] * bla[i][w];
  cout << r.first << endl;
  return 0;
}
