#include<cstdio>
inline int read()
{
register int ret = 0;
register bool f = 1;
register char ch = getchar();
while (ch < '0' || ch > '9')
(ch == '-') ? f = 0 : 0, ch = getchar();
while (ch >= '0' && ch <= '9')
ret = (ret << 1) + (ret << 3) + (ch ^ 48), ch = getchar();
return f ? ret : -ret;
}
const int m = read(), n = read(), K = read(), mod = 1e9 + 7;
int sit[(1 << 6) + 9], st[(1 << 6) + 9], cnt;
void dfs(int cur, int sum, int x)
{
if (sum > K)
return;
if (cur >= m)
{
sit[++ cnt] = x;
st[cnt] = sum;
return;
}
dfs(cur + 1, sum, x);
dfs(cur + 1, sum + 1, x + (1 << cur));
}
int dp[109][(1 << 6) + 9][(1 << 6) + 9][29];
int main()
{
dfs(0, 0, 0);
int i, j, k, c, x, ans = 0;
dp[0][0][0][0] = 1;
for (i = 1;i <= n;++ i)
{
for (j = 0;j <= cnt;++ j)
{
for (k = 0;k <= cnt;++ k)
{
if (sit[j] & (sit[k] << 2))
continue;
if ((sit[j] << 2) & sit[k])
continue;
for (c = 0;c <= cnt;++ c)
{
if (sit[c] & (sit[j] << 1))
continue;
if((sit[c] << 1) & sit[j])
continue;
if (sit[k] & (sit[c] << 2))
continue;
if ((sit[k] << 2) & sit[c])
continue;
for (x = K;x >= st[j];-- x)
dp[i][j][k][x] = (dp[i][j][k][x] + dp[i - 1][k][c][x - st[j]]) % mod;
}
}
}
}
for (i = 0;i <= cnt;++ i)
for (j = 0;j <= cnt;++ j)
ans += dp[n][i][j][K], ans %= mod;
printf("%d", ans);
return 0;
}