void main(){
  import std.stdio, std.conv, std.string, std.algorithm;

  long n, a, b, k; rd(n, a, b, k);

  const long mod=998244353;
  const int M=1_000_00*4;
  static fact=new long[](M);
  static inv_fact=new long[](M);
  { // init
    fact[0]=fact[1]=1;
    foreach(i; 2..M) fact[i]=i*fact[i-1]%mod;
    long powmod(long a, long x){
      if(x==0) return 1;
      else if(x==1) return a;
      else if(x&1) return a*powmod(a, x-1)%mod;
      else return powmod(a*a%mod, x/2);
    }
    foreach(i; 0..M) inv_fact[i]=powmod(fact[i], mod-2);
  }
  long comb(long nn, long rr){
    if(nn<rr) return 0;
    long ret=fact[nn]%mod;
    (ret*=inv_fact[rr])%=mod;
    (ret*=inv_fact[nn-rr])%=mod;
    return ret;
  }
  
  long tot=0;
  for(long x=0; x<=n; x++)if(k-a*x>=0){
    if((k-a*x)%b==0){
      long y=(k-a*x)/b;
      if(y>n) continue;
      (tot+=comb(n, x)*comb(n, y)%mod)%=mod;
    }
  }
  writeln(tot);
}

void rd(T...)(ref T x){
  import std.stdio, std.string, std.conv;
  auto l=readln.split;
  assert(l.length==x.length);
  foreach(i, ref e; x) e=l[i].to!(typeof(e));
}
