N,P,C=map(int,raw_input().split()) dp=[[[0 for i in range(130)] for k in range(6)] for j in range(P+1)] dp[0][0][0]=1 for i in range(P): for j,p in enumerate([2,3,5,7,11,13]): for l in range(j+1): for k in range(p,130): dp[i+1][j][k]+=dp[i][l][k-p] dp2=[[[0 for i in range(130)] for k in range(6)] for j in range(C+1)] for i in range(6): for j in range(130): dp2[0][0][j]+=dp[P][i][j] for i in range(C): for j,p in enumerate([4,6,8,9,10,12]): for l in range(j+1): for k in range(p,130): dp2[i+1][j][k]+=dp2[i][l][k-p] patterns=[0 for i in range(130)] m=0 for j in range(130): for i in range(6): patterns[j]+=dp2[C][i][j] if patterns[j]>0: #print j,patterns[j] m=max(m,j) A=[[0 for i in range(m)] for j in range (m)] for i in range(m-1): A[i][i+1]=1 for i in range(1,m+1): A[i-1][0]=patterns[i] #for i in range(m): # for j in range(m): # print A[i][j], # print V=[0 for i in range(m)] V[0]=1 while(N>0): if N%2==1: nV=[0 for i in range(m)] for i in range(m): for j in range(m): nV[i]+=A[i][j]*V[j] nV[i]%=1000000007 V=nV nA=[[0 for i in range(m)] for j in range(m)] for i in range(m): for j in range(m): for k in range(m): nA[i][j]+=A[i][k]*A[k][j] nA[i][j]%=1000000007 A=nA N/=2 print sum(V)%1000000007