#include <iostream>
using namespace std;
const long long Mod = 1000000007 ;
long long mod( long long a, long long mod) {
return a% mod;
}
long long sum( long long a, long long b) {
return ( a + b) % Mod;
}
long long mul( long long a, long long b) {
return ( a * b) % Mod;
}
long long fastpow( long long a, long long n) {
if ( n == 0 ) {
return 1 ;
}
if ( n % 2 == 0 ) {
int g = fastpow( a, n / 2 ) ;
return mul ( g, g) ;
}
else {
return mul( a, fastpow( a, n - 1 ) ) ;
}
}
long long revers( long long a) {
return fastpow( a, Mod - 2 ) ;
}
long long dv( long long a, long long b) {
return mul( a, revers( b) ) ;
}
int main( ) {
long long n, l, m;
cin >> n >> m >> l;
long long fact[ n + 1 ] ;
fact[ 0 ] = 1 ;
for ( int i = 1 ; i < n + 1 ; i++ )
fact[ i] = mul( fact[ i - 1 ] , i) ;
long long s = 0 ;
for ( int i = 1 ; i <= l; i++ ) {
if ( i * m <= n)
s = sum( s, ( dv( fact[ n] , mul( fact[ n - i * m] , fact[ i * m] ) ) , Mod) % mod) ;
}
cout << s% Mod;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNvbnN0IGxvbmcgbG9uZyBNb2QgPSAxMDAwMDAwMDA3OwoKbG9uZyBsb25nIG1vZChsb25nIGxvbmcgYSwgbG9uZyBsb25nIG1vZCl7CiAgICByZXR1cm4gYSVtb2Q7Cn0KCmxvbmcgbG9uZyBzdW0obG9uZyBsb25nIGEsIGxvbmcgbG9uZyBiKXsKICAgIHJldHVybiAoYSArIGIpJSBNb2Q7Cn0KCmxvbmcgbG9uZyBtdWwobG9uZyBsb25nIGEsIGxvbmcgbG9uZyBiKXsKICAgIHJldHVybiAoYSAqIGIpJSBNb2Q7Cn0KCmxvbmcgbG9uZyBmYXN0cG93KGxvbmcgbG9uZyBhLCBsb25nIGxvbmcgbil7CiAgICBpZiAobiA9PSAwKXsKICAgICAgICByZXR1cm4gMTsKICAgIH0KICAgIGlmIChuICUgMiA9PSAwKXsKICAgICAgICBpbnQgZyA9IGZhc3Rwb3coYSwgbiAvIDIpOwogICAgICAgIHJldHVybiBtdWwgKGcsIGcpOwogICAgfQogICAgZWxzZXsKICAgICAgICByZXR1cm4gbXVsKGEsIGZhc3Rwb3coYSwgbiAtIDEpKTsKICAgIH0KfQoKbG9uZyBsb25nIHJldmVycyhsb25nIGxvbmcgYSl7CiAgICByZXR1cm4gZmFzdHBvdyhhLCBNb2QgLSAyKTsKfQoKbG9uZyBsb25nIGR2KGxvbmcgbG9uZyBhLCBsb25nIGxvbmcgYil7CiAgICByZXR1cm4gbXVsKGEsIHJldmVycyhiKSk7Cn0KCmludCBtYWluKCl7CiAgICBsb25nIGxvbmcgbiwgbCwgbTsKICAgIGNpbiA+PiBuID4+IG0gPj4gbDsKICAgIGxvbmcgbG9uZyBmYWN0W24gKyAxXTsKICAgIGZhY3RbMF0gPSAxOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPCBuICsgMTsgaSsrKQogICAgICAgIGZhY3RbaV0gPSBtdWwoZmFjdFtpIC0gMV0sIGkpOwogICAgbG9uZyBsb25nIHMgPSAwOwoKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IGw7IGkrKyl7CiAgICAgICAgaWYgKGkgKiBtIDw9IG4pCiAgICAgICAgICBzID0gc3VtKHMsIChkdihmYWN0W25dLCBtdWwoZmFjdFtuIC0gaSAqIG1dLCBmYWN0W2kgKiBtXSkpLCBNb2QpJW1vZCk7CiAgICB9CiAgICBjb3V0IDw8IHMlTW9kOwp9Cg==
compilation info
prog.cpp: In function 'int main()':
prog.cpp:51:76: error: invalid operands of types 'const long long int' and 'long long int(long long int, long long int)' to binary 'operator%'
s = sum(s, (dv(fact[n], mul(fact[n - i * m], fact[i * m])), Mod)%mod);
^
stdout