为了能分清楚每块板砖用来秒掉哪种类型的题(雾),他需要把板砖染色。他手上有红色、蓝色和绿色颜料可以染色。其中,用红色染一块板砖可以得到A的能力加成;用蓝色染一块板砖可以得到B的能力加成;用绿色染一块板砖可以得到C的能力加成。板砖可以不染色,这样这块板砖就不会贡献任何的能力加成。为了使得能力加成正好为x,有几种染法。C=A+B;
其实可以不管绿色的。直接看A+B,因为
RB_GBG
R__R_R
_B_BBB
inline void init() {
fac[0] = 1;
rep(i, 1, N) {
fac[i] = 1ll * fac[i - 1] * i % mod;
}
inv_fac[N] = Quick_Pow(fac[N], mod - 2);
drp(i, N - 1, 0) {
inv_fac[i] = inv_fac[i + 1] * (i + 1) % mod;
}
inv_fac[0] = 1;
}
inline lxl C(lxl n,lxl m){
if(m>n) return 0;
return fac[n]*inv_fac[m]%mod*inv_fac[n-m]%mod;
}
/*
inline lxl AA(lxl a, lxl b, lxl c) {
return fac[n] * inv_fac[a] % mod * inv_fac[b] % mod * inv_fac[c] % mod * inv_fac[n - a - b - c] % mod;
}*/
int main() {
freopen("color.in","r",stdin);
freopen("color.out","w",stdout);
init();
read(T);
while(T--) {
read(n);
read(A);
read(B);
read(x);
ans=0;
rep(i,0,n){
lxl rest=x-1ll*i*A;
if(rest<0) continue;
if(rest%B) continue;
lxl j(rest/B);
ans=(ans+C(n,i)*C(n,j)%mod)%mod;
}
out(ans, '
');
}
return 0;
}