#include <bits/stdc++.h>
#define il inline
#define RG register
#define ll long long
#define rhl (1000000007)
using namespace std;
int f[2][4010][2],sum[4010],n,m,k,ans;
il int gi(){
RG int x=0,q=1; RG char ch=getchar();
while ((ch<'0' || ch>'9') && ch!='-') ch=getchar();
if (ch=='-') q=-1,ch=getchar();
while (ch>='0' && ch<='9') x=x*10+ch-48,ch=getchar();
return q*x;
}
il int add(RG int x,RG int y){
x+=y; if (x>=rhl) x-=rhl; return x;
}
int main(){
n=gi(),m=gi(),k=gi(),--m,--k,f[1][0][0]=1;
for (RG int i=1;i<=k;++i){
f[1][i][1]=1; if (k-i<=m && i%k==n%k && (k-i)%k==m%k) ans++;
}
for (RG int i=2,pre=1,cur=0;i<=2*max(n,m);++i,pre=cur,cur^=1){
for (RG int j=0;j<=n;++j) sum[j+1]=add(sum[j],add(f[pre][j][0],f[pre][j][1]));
for (RG int j=0;j<=n;++j){
f[cur][j][0]=add(f[pre][j][0],f[pre][j][1]);
f[cur][j][1]=sum[j]-sum[max(j-k,0)];
if (f[cur][j][1]<0) f[cur][j][1]+=rhl;
}
for (RG int j=0;j<=n;++j)
if (k*i-j<=m && j%k==n%k && (k*i-j)%k==m%k) ans=add(ans,f[cur][j][1]);
}
cout<<ans; return 0;
}