MOD = 10 ** 9 + 7 def multiply(A, B): n = len(A) m = len(B) C = [0] * (n + m - 1) for i, a in enumerate(A): for j, b in enumerate(B): C[i + j] += a * b C[i + j] %= MOD return C # [x ^ n] P(x) / Q(x) def BostanMori(P, Q, n): while n: R = [(x * (-1) ** (i % 2)) % MOD for i, x in enumerate(Q)] Q = multiply(Q, R)[::2] P = multiply(P, R)[n % 2::2] n >>= 1 return P[0] * pow(Q[0], MOD - 2, MOD) % MOD n, P, C = map(int, input().split()) prime = [2, 3, 5, 7, 11, 13] comp = [4, 6, 8, 9, 10, 12] def make_dp(P, C): pp = [0] * (13 * P + 1) def dfs_pp(i, j, tot): if i == 6: if j == P: pp[tot] += 1 return for k in range(j, P + 1): dfs_pp(i + 1, k, tot) tot += prime[i] dfs_pp(0, 0, 0) cc = [0] * (12 * C + 1) def dfs_cc(i, j, tot): if i == 6: if j == C: cc[tot] += 1 return for k in range(j, C + 1): dfs_cc(i + 1, k, tot) tot += comp[i] dfs_cc(0, 0, 0) return multiply(pp, cc) dp = make_dp(P, C) Q = [MOD - d for d in dp] Q[0] = 1 ma = len(dp) - 1 for i in range(ma - 1, -1, -1): dp[i] += dp[i + 1] dp[i] %= MOD ans = 0 for i in range(max(0, n - ma), n): ret = BostanMori([1], Q, i) ans += ret * dp[n - i] ans %= MOD print(ans)