#include <bits/stdc++.h>
using namespace ::std;
long long maxn = 101;
const long long maxs = 101;
const long long mod = 1e6 + 3;
const long long inf = 1e9 + 500;
struct matris {
  long long u[maxs][maxs];
  matris() {
    for (char i = 0; i < maxn; i++) {
      for (char j = 0; j < maxn; j++) {
        u[i][j] = 0;
      }
    }
  }
};
matris operator*(const matris& a, const matris& b) {
  matris ans;
  for (char i = 0; i < maxn; i++) {
    for (char j = 0; j < maxn; j++) {
      ans.u[i][j] = 0;
    }
  }
  for (char i = 0; i < maxn; i++) {
    for (char j = 0; j < maxn; j++) {
      for (char k = 0; k < maxn; k++) {
        ans.u[i][k] += (a.u[i][j] * b.u[maxn - 1 - j][k]) % mod;
      }
    }
  }
  for (char i = 0; i < maxn; i++) {
    for (char j = 0; j < maxn; j++) {
      ans.u[i][j] %= mod;
    }
  }
  return ans;
}
matris operator^(matris a, long long b) {
  matris ans = matris();
  for (char j = 0; j < maxn; j++) {
    ans.u[j][j] = 1;
  }
  while (b > 0) {
    if (b & 1) {
      ans = ans * a;
    }
    b = (b >> 1);
    a = a * a;
  }
  return ans;
}
void pri(const matris& a) {
  cout << "===========\n";
  for (long long i = 0; i < maxn; i++) {
    for (long long j = 0; j < maxn; j++) {
      cout << a.u[i][j] << ' ';
    }
    cout << endl;
  }
  cout << "==============\n";
}
int main() {
  matris a = matris();
  long long c, w, h;
  cin >> c >> w >> h;
  if (c == 1) {
    cout << h + 1;
    return 0;
  }
  maxn = w + 1;
  for (long long i = 0; i <= w; i++) {
    a.u[0][i] = 1;
  }
  for (long long i = 1; i <= w; i++) {
    a.u[i][w - i + 1] = h;
  }
  a = (a ^ (c + 2));
  cout << a.u[w][0];
}
