#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=