波动数列,dp,组合数
#include<iostream>
using namespace std;
const int N=1010;
int dp[N][N];
const int mod=1e8+7;
int n,s,a,b; int get_mod(int x)
{
return (x%n+n)%n;
}
int main()
{
cin>>n>>s>>a>>b;
dp[0][0]=1;
for(int i=1;i<=n-1;i++)
for(int j=0;j<=n-1;j++)
dp[i][j]=(dp[i-1][get_mod(j-a*i)]+dp[i-1][get_mod(j+b*i)])%mod;
printf("%d\n",dp[n-1][get_mod(s)]);
return 0;
}