#include <bits/stdc++.h>
using namespace std;
inline long long gcd(long long a, long long b) {
  return (b ? gcd(b, a % b) : a);
}
inline long long lcm(long long a, long long b) { return (a / gcd(a, b)) * b; }
long long A[103][103], E[103][103], AUX[103][103];
long long c, w, h;
void mult(long long R[][103], long long X[][103], long long Y[][103]) {
  memset(AUX, 0, sizeof AUX);
  for (int i = 0; i <= w; i++) {
    for (int j = 0; j <= w; j++) {
      for (int k = 0; k <= w; k++) {
        AUX[i][j] += (X[i][k] * Y[k][j]) % 1000003;
        AUX[i][j] %= 1000003;
      }
    }
  }
  for (int i = 0; i <= w; i++)
    for (int j = 0; j <= w; j++) R[i][j] = AUX[i][j];
}
void fastExp(long long M[][103], long long e) {
  long long ANS[103][103];
  memset(ANS, 0, sizeof ANS);
  for (int i = 0; i <= w; i++) ANS[i][i] = 1;
  while (e) {
    if (e & 1) {
      mult(ANS, ANS, M);
    }
    mult(M, M, M);
    e /= 2;
  }
  for (int i = 0; i <= w; i++)
    for (int j = 0; j <= w; j++) M[i][j] = ANS[i][j];
}
int main() {
  cin >> c >> w >> h;
  for (int i = 0; i <= w; i++) {
    E[i][0] = 1;
    if (i != 0) E[i - 1][i] = h;
  }
  fastExp(E, c);
  for (int i = 0; i <= w; i++) A[i][0] = 1;
  mult(A, A, E);
  long long ans = 0;
  for (int i = 0; i <= w; i++) {
    ans += A[0][i];
    ans %= 1000003;
  }
  cout << ans << endl;
}
