#include <bits/stdc++.h>
using namespace std;
const int mo = 1000000007;
int n, m, K, ans, C[105][105];
int f[105][55][55][105];
void UPD(int &x, int y) { (x += y) >= mo ? x -= mo : 233; }
int main() {
  n /= 2;
  scanf("%d%d%d", &n, &m, &K);
  for (int i = (int)(0); i <= (int)(100); i++) C[i][0] = 1;
  for (int i = (int)(1); i <= (int)(100); i++)
    for (int j = (int)(1); j <= (int)(i); j++)
      C[i][j] = min(101, C[i - 1][j] + C[i - 1][j - 1]);
  for (int i = (int)(1); i <= (int)(n / 2); i++) f[1][i][i][1] = 1;
  for (int v = (int)(1); v <= (int)(m); v++) {
    for (int j = (int)(1); j <= (int)(n / 2); j++)
      for (int way = (int)(1); way <= (int)(K); way++)
        UPD(ans, f[v][0][j][way] * 1ll * (m + 1 - v) % mo);
    for (int j = (int)(1); j <= (int)(n / 2); j++)
      for (int la = (int)(1); la <= (int)(j); la++)
        for (int no = (int)(0); no <= (int)(n / 2 - j); no++)
          for (int way = (int)(1); way <= (int)(K / C[la + no - 1][la - 1]);
               way++)
            UPD(f[v + 1][no][j + no][way * C[la + no - 1][la - 1]],
                f[v][la][j][way]);
  }
  printf("%d\n", ans);
}
