Program main
  implicit none
  integer(8) :: n, a,b, K
  integer(8) :: a_1, b_1
  integer(8) :: i, j
  integer(8) :: mbase
  integer(8),allocatable :: f(:),finv(:),inv(:)
  integer :: out
  mbase = 998244353
  read(*,*) n, a, b, K
  allocate( f(0:N), finv(0:N), inv(0:N) )
  f(0) = 1
  f(1) = 1
  finv(0) = 1
  finv(1) = 1
  inv(0) = 0
  inv(1) = 1
  do i = 2,N
     f(i) = modulo( f(i-1)* i,mbase  )
     inv(i) = modulo ( -inv(modulo(mbase,i)) *(mbase/ i ), mbase )
     finv(i) = modulo( finv(i-1)*inv(i), mbase ) 
  end do
  out = 0
  do i = 0, N
     if ( mod( ( K - (A*i) ),B) == 0 ) then
        j = ( K - (A*i) )/B
        if ( 0 <= j.and.j <= N  ) then
           out = modulo(modulo( nCr2(n,i,finv,f) * nCr2(n,j,finv,f) , mbase) + out, mbase)
        end if
     end if
  end do
  write(*,'(i0)') out
  stop
contains
  integer(8) function mpow(a,n,mbase )
    ! a**n mod mbase
    integer(8) :: a
    integer(8) ::  n, mbase
    integer(8) :: ntmp, atmp
    mpow = 1
    atmp = a
    ntmp = n
    do while(ntmp > 0)
       !if ( mod(ntmp,2) == 0   ) mpow = modulo( mpow * atmp,mbase)
       if ( iand(ntmp,1) >0 ) mpow = modulo( mpow * atmp,mbase)
       atmp = modulo( atmp * atmp, mbase )
       ntmp = ishft(ntmp,-1)
    end do
  end function mpow

  
  integer(8) function nCr(n,r )
    integer(8) :: n, r
    integer(8) :: n_r
    integer(8) :: i
    integer(8) :: n1, n2
    integer(8) :: inv, inv2
    if ( r == 0 ) then
       nCr = 1
       return
    end if
    n_r = n-r
    n1 = 1
    do i = n,n_r+1,-1
       n1 =  mod(n1*i,mbase)
    end do
    n2 = 1
    do i = 1,r
       n2 = mod(n2*i,mbase)
    end do
    n2 = mpow(n2,mbase-2,mbase)
    nCr =  mod( n1*n2,mbase)
  end function nCr
  
  integer(8) function nCr2(n,r,finv,f)
    integer(8) :: finv(0:N), f(0:N)
    integer(8) :: n,r, r2
    r2 = min(r,n-r)
    !nCr = modulo( f(n)*modulo( (finv(r2)*finv(n-r2)), mbase ), mbase )
    nCr2 = mod( f(n)*(mod(finv(r2)*finv(n-r2),mbase) ), mbase )
  end function nCr2
  
end program main
