#include <bits/stdc++.h>
using namespace std;
constexpr int mod = 1e9 + 7;
int n,m,id;
int div0, div1;
long long ans = 1;
void getdiv(){
for(int i = 1; i*i <= id; ++i){
if(id % i == 0){
div0 += 2;
if(i*i == id) --div0;
}
}
--div0;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> n >> m >> id;
getdiv();
div1 = m/id - 1;
if(div0-n+1 < 0 or div1 - n + 1 < 0){
cout << 0;
return 0;
}
for(int i = div0; i > max(div0-n+1, 0); --i){
ans *= i;
//cout << i << " " << ans << "\n";
ans %= mod;
}
for(int i = div1; i > max(div1-n+1,0); --i){
ans *= i;
ans %= mod;
}
ans *= 2;
if(ans > mod) ans -= mod;
cout << ans << '\n';
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY29uc3RleHByIGludCBtb2QgPSAxZTkgKyA3OwppbnQgbixtLGlkOwppbnQgZGl2MCwgZGl2MTsKbG9uZyBsb25nIGFucyA9IDE7Cgp2b2lkIGdldGRpdigpewogICAgZm9yKGludCBpID0gMTsgaSppIDw9IGlkOyArK2kpewogICAgICAgIGlmKGlkICUgaSA9PSAwKXsKICAgICAgICAgICAgZGl2MCArPSAyOwogICAgICAgICAgICBpZihpKmkgPT0gaWQpIC0tZGl2MDsKICAgICAgICB9CiAgICB9CiAgICAtLWRpdjA7Cn0KCmludCBtYWluKCkKewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKDApOwogICAgY291dC50aWUoMCk7CiAgICBjaW4gPj4gbiA+PiBtID4+IGlkOwogICAgZ2V0ZGl2KCk7CgogICAgZGl2MSA9IG0vaWQgLSAxOwogICAgaWYoZGl2MC1uKzEgPCAwIG9yIGRpdjEgLSBuICsgMSA8IDApewogICAgICAgIGNvdXQgPDwgMDsKICAgICAgICByZXR1cm4gMDsKICAgIH0KICAgIGZvcihpbnQgaSA9IGRpdjA7IGkgPiBtYXgoZGl2MC1uKzEsIDApOyAtLWkpewogICAgICAgIGFucyAqPSBpOwogICAgICAgIC8vY291dCA8PCBpIDw8ICIgIiA8PCBhbnMgPDwgIlxuIjsKICAgICAgICBhbnMgJT0gbW9kOwogICAgfQogICAgZm9yKGludCBpID0gZGl2MTsgaSA+IG1heChkaXYxLW4rMSwwKTsgLS1pKXsKICAgICAgICBhbnMgKj0gaTsKICAgICAgICBhbnMgJT0gbW9kOwogICAgfQogICAgYW5zICo9IDI7CiAgICBpZihhbnMgPiBtb2QpIGFucyAtPSBtb2Q7CiAgICBjb3V0IDw8IGFucyA8PCAnXG4nOwogICAgcmV0dXJuIDA7Cn0=