#include <bits/stdc++.h>
#define xx first
#define yy second
#define mp make_pair
#define pb push_back
#define fill( x, y ) memset( x, y, sizeof x )
#define copy( x, y ) memcpy( x, y, sizeof x )
using namespace std;
typedef long long LL;
typedef pair < int, int > pa;
const int MAXN = 4005;
const int mod = 1e9 + 7;
int n, m, k, ans, f[MAXN][MAXN];
inline void inc(int &x, int y) { x += y; if( x >= mod ) x -= mod; }
inline void dec(int &x, int y) { x -= y; if( x < 0 ) x += mod; }
int main()
{
#ifdef wxh010910
freopen( "data.in", "r", stdin );
#endif
scanf( "%d%d%d", &n, &m, &k );
f[ 0 ][ 0 ] = 1;
for( int i = 1 ; i <= n + m ; i++ )
{
for( int j = 0 ; j <= n + m ; j++ )
inc( f[ i ][ j ], f[ i - 1 ][ j ] ), dec( f[ i ][ j + k ], f[ i - 1 ][ j ] );
for( int j = 1 ; j <= n + m ; j++ ) inc( f[ i ][ j ], f[ i ][ j - 1 ] );
}
for( int i = 1 ; i <= n + m ; i++ )
for( int j = 0 ; j <= n + m ; j++ ) if( f[ i ][ j ] )
{
int x = j, y = i * ( k - 1 ) - j;
if( y < 0 ) break;
if( x <= n && y <= m - 1 && ( x % ( k - 1 ) == n % ( k - 1 ) ) ) inc( ans, f[ i ][ j ] ), dec( ans, f[ i - 1 ][ j ] );
}
cout << ans << endl;
}