Program main
  implicit none
  integer(8) :: n, a,b, K
  integer(8) :: a_1, b_1
  integer(8) :: i, j
  integer(8) :: mbase
  integer :: out
  mbase = 998244353
  read(*,*) n, a, b, K
  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( nCr(n,i) * nCr(n,j) , 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
  
end program main
