#include <stdio.h>
#include <algorithm>
#include <string.h>
#include <vector>
#include <cmath>
using namespace std;
const int maxn=1000+10, N=35, mod=(1e9)+7;
int n, m, k, p, f[100+10][maxn][N];
int lcm[maxn][maxn], val[N], pos[maxn];
int main()
{
for(int i=1; i<maxn; i++)
for(int j=1; j<maxn; j++)
lcm[i][j]=i*j/__gcd(i, j);
while(scanf("%d%d%d", &n, &m, &k)!=EOF)
{
p=0;
memset(val, 0, sizeof val);
memset(pos, 0, sizeof pos);
for(int i=1; i<=m; i++) if(m%i==0) val[++p]=i, pos[i]=p;
memset(f, 0, sizeof f);
f[0][0][1]=1;
for(int i=1; i<=k; i++)
for(int j=i-1; j<=n; j++)
for(int x=1; x<=p; x++)
for(int y=1; y<=p && j+val[y]<=n; y++)
{
int _lcm=lcm[val[x]][val[y]];
if(_lcm<=m && pos[_lcm]) f[i][j+val[y]][pos[_lcm]]=(f[i][j+val[y]][pos[_lcm]]+f[i-1][j][x])%mod;
}
printf("%d\n", f[k][n][pos[m]]);
}
return 0;
}