#include<bits/stdc++.h>
#define mod 1000000007
using namespace std;
int n,m,a[2505],dp[5005][10005],s[5005][10005];
int main(){
scanf("%*d%d%d",&n,&m);
int i,j,k;
for (i=0; i<=m*2; i++)
for (j=0; j<=10000; j++){
if (i && j){
k=max(0,j-1-(i-(i+1)%2));
// for (k=j-1; k>=0 && j-k-1<=i-((i+1)%2); k--) dp[i][j]=(dp[i][j]+dp[i-1][k])%mod;
if (k) dp[i][j]=(s[i-1][j-1]-s[i-1][k-1]+mod)%mod; else dp[i][j]=s[i-1][j-1];
}
if (j<=i) dp[i][j]=(dp[i][j]+1)%mod;
if (!j) s[i][j]=dp[i][j]; else s[i][j]=(s[i][j-1]+dp[i][j])%mod;
}
for (i=1; i<=n; i++) scanf("%d",&a[i]);
int ans=1;
for (i=1,m=m*2-1; i<n && ans; i++,m-=2)
ans=(m<0)?0:(long long)ans*dp[m][a[i+1]-a[i]-1]%mod;
printf("%d\n",ans);
return 0;
}
./Main.cpp: In function ‘int main()’:
./Main.cpp:7:24: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%*d%d%d",&n,&m);
^
./Main.cpp:19:40: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
for (i=1; i<=n; i++) scanf("%d",&a[i]);
^