#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<vector>
#include<set>
#include<map>
#include<bitset>
#include<cmath>
#include<string>
#define ls (t<<1)
#define rs ((t<<1)+1)
#define mid ((l+r)>>1)
#define fi first
#define se second
#define mk make_pair
#define pb push_back
#define N 2005
#define M 200005
#define seed 23333
using namespace std;
const int Mo=(int)1e9+7;
int i,j,m,n,p,K,f[N*2][N*2],ans,k;
void jia(int &x,int y)
{
x+=y; if (x>=Mo) x-=Mo;
}
int main()
{
scanf("%d%d%d",&n,&m,&K);
f[0][0]=1;
for (i=1;;++i)
{
if (i*(K-1)>(n+m-1)) break;
for (j=0;j<=(K-1)*(i-1)&&j<=n;++j)
if (f[i-1][j])
{
for (k=1;k<K&&j+k<=n;++k)
{
int now=j+k;
if (i*(K-1)-now<=m-1&&now%(K-1)==n%(K-1)&&(i*(K-1)-now)%(K-1)==(m-1)%(K-1))
jia(ans,f[i-1][j]);
}
for (k=0;k<K&&j+k<=n;++k)
jia(f[i][j+k],f[i-1][j]);
}
}
printf("%d\n",ans);
}
./Main.cpp: In function ‘int main()’:
./Main.cpp:33:27: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d%d%d",&n,&m,&K);
^