// napisane Monikou
// obycajna dynamika 2^{2M}*K*N

#include<iostream>
#include<cstdlib>
#include<cstring>

#define SIZE(s) ((int)((s).size()))
#define FOREACH(it,vec) for(typeof((vec).begin())it=(vec).begin();it!=(vec).end();++it)
#define REP(i,n) for(int i=0;i<(int)(n);++i)

#define MAXN 100
#define MAXM 8
#define MOD 420047

using namespace std;

int N,M,K;
long long P[2][MAXN*MAXM+1][(1<<MAXM)];

int black(long long w) {   // povie pocet ciernych tehliciek, ktore su v stlpci w. Ak su 2 cierne vedla seba, tak -1
  int cnt = 0;
  if (w & (w<<1)) return -1;
  REP(i,M) if (w&(1LL<<i)) ++cnt;
  return cnt;
}

bool over(long long u, long long v) {
  if (u & v) return false;
  return true;
}

int main(void) {
  memset(P,0,sizeof(P));
  scanf("%d",&N); scanf("%d",&M); scanf("%d",&K);

  if (N==0) { printf("0\n"); return 0; }

  for(long long i=0;i<(1LL<<M);++i) {
    int b = black(i);
    if (b == -1) continue;
    P[0][b][i] = 1;
  }

  REP(n,N-1) {
    memset(P[(n+1)%2],0,sizeof(P[(n+1)%2]));
    for(long long i=0;i<(1LL<<M);++i) {
      if (black(i) == -1) continue;
      REP(k,K+1) {
        for(long long j=0;j<(1LL<<M);++j) {
          int b = black(j);
          if (b == -1 || k+b > K) continue;
          if (over(i,j)) {
            P[(n+1)%2][k+b][j]+=P[n%2][k][i];
            P[(n+1)%2][k+b][j]%=MOD;
          }
        }
      }
    }
  }
  long long sum = 0;
  for(long long i=0;i<(1LL<<M);++i) {
    sum+= P[(N+1)%2][K][i];
    sum%= MOD;
  }
  printf("%lld\n",sum);
  return 0;
}

