#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#define LL long long
#define fo(i,j,k) for(int i=j;i<=k;i++)
#define fd(i,j,k) for(int i=j;i>=k;i--)
#define fr(i,j) for(int i=beg[j];i;i=nex[i])
using namespace std;
int const mn=2e3+3,mo=1e9+7;
int n,m,K,f[mn*2][mn][2],g[mn];
int main(){
	scanf("%d%d%d",&n,&m,&K);
	m--;K--;
	int lim=(n+m)/K,ans=0;
	fo(j,0,K){
		f[1][j][j!=0]=1;
		if((!((j-n)%K))&&(!((K-j-m)%K))&&(K-j<=m))
			ans=(ans+f[1][j][1])%mo;
	}
	fo(i,2,lim){
		fo(j,0,n)g[j]=((j?g[j-1]:0)+1ll*f[i-1][j][0]+f[i-1][j][1])%mo;
		fo(j,0,n){
			f[i][j][0]=(f[i-1][j][0]+f[i-1][j][1])%mo;
			if(j)f[i][j][1]=(g[j-1]-((j-K-1>=0)?g[j-K-1]:0))%mo;
			if((!((j-n)%K))&&(!((K*i-j-m)%K))&&(K*i-j<=m))
				ans=(ans+f[i][j][1])%mo;
		}
	}
	printf("%d",(ans+mo)%mo);
	return 0;
}
