n,a,b,k=list(map(int,input().split()))

p=998244353

def getinv(n):

  inv=[0]*(n+1)

  for i in range(1,n+1):

    inv[i]=pow(i,p-2,p)

  return inv

def getnCr(n):

  inv=getinv(n)

  nCr=[0]*(n+1)

  nCr[0]=1

  for i in range(1,n+1):

    nCr[i]=(nCr[i-1]*(n-i+1)*inv[i])%p

  return nCr

def solve(n,a,b,k):

  ans=0

  nCr=getnCr(n)

  for i in range(n+1):

    if (k-a*i)<0 or (k-a*i)%b!=0:

      continue

    j=(k-a*i)//b

    if a*i+b*j==k and 0<=j<=n:

      ans+= nCr[i]*nCr[j]

      ans%=p

  return ans

print((solve(n,a,b,k)))
p=998244353

def getinv(n):

  inv = [0]*(n+1)

  #フェルマーの小定理より、i=1の時は1であることが分かる

  inv[1] = 1

  for i in range(2,n+1):

    #そのまま計算すると負になってしまうので、最後にmod pを取ることで正に戻す

    inv[i] = (-(p//i)*inv[p%i])%p

  return inv



def getCmb(n):

  #逆元を取得

  inv = getinv(n)

  #0 <= r <= n に対してnCrを求める

  nCr = [0]*(n+1)

  #r=0の時は、r-1が存在しないので与えておく

  nCr[0] = 1

  for i in range(1,n+1):

    #iで割る代わりにinv[i]をかけ、mod pを求める

    nCr[i] = (nCr[i-1]*(n-i+1)*inv[i])%p

  return nCr



def solve(n,a,b,k):

  nCr = getCmb(n)

  ans=0

  for i in range(n+1):

    #割り切れない時もあるが、その時は次の条件a*i+b*j==kで弾かれるので問題ない

    j = (k-a*i)//b

    #条件に一致するものを選ぶ。jの範囲に注意

    if a*i + b*j == k and 0<=j<=n:

      ans+= (nCr[i]*nCr[j])%p

      ans%= p

  return ans



n,a,b,k=list(map(int,input().split()))

print((solve(n,a,b,k)))
n, a, b, k = list(map(int, input().split()))
p = 998244353


def getinv(n):
    inv = [0] * (n + 1)
    for i in range(1, n + 1):
        inv[i] = pow(i, p - 2, p)
    return inv


def getnCr(n):
    inv = getinv(n)
    nCr = [0] * (n + 1)
    nCr[0] = 1
    for i in range(1, n + 1):
        nCr[i] = (nCr[i - 1] * (n - i + 1) * inv[i]) % p
    return nCr


def solve(n, a, b, k):
    ans = 0
    nCr = getnCr(n)
    for i in range(n + 1):
        if (k - a * i) < 0 or (k - a * i) % b != 0:
            continue
        j = (k - a * i) // b
        if a * i + b * j == k and 0 <= j <= n:
            ans += nCr[i] * nCr[j]
            ans %= p
    return ans


print((solve(n, a, b, k)))

p = 998244353


def getinv(n):
    inv = [0] * (n + 1)
    # フェルマーの小定理より、i=1の時は1であることが分かる
    inv[1] = 1
    for i in range(2, n + 1):
        # そのまま計算すると負になってしまうので、最後にmod pを取ることで正に戻す
        inv[i] = (-(p // i) * inv[p % i]) % p
    return inv


def getCmb(n):
    # 逆元を取得
    inv = getinv(n)
    # 0 <= r <= n に対してnCrを求める
    nCr = [0] * (n + 1)
    # r=0の時は、r-1が存在しないので与えておく
    nCr[0] = 1
    for i in range(1, n + 1):
        # iで割る代わりにinv[i]をかけ、mod pを求める
        nCr[i] = (nCr[i - 1] * (n - i + 1) * inv[i]) % p
    return nCr


def solve(n, a, b, k):
    nCr = getCmb(n)
    ans = 0
    for i in range(n + 1):
        # 割り切れない時もあるが、その時は次の条件a*i+b*j==kで弾かれるので問題ない
        j = (k - a * i) // b
        # 条件に一致するものを選ぶ。jの範囲に注意
        if a * i + b * j == k and 0 <= j <= n:
            ans += (nCr[i] * nCr[j]) % p
            ans %= p
    return ans


n, a, b, k = list(map(int, input().split()))
print((solve(n, a, b, k)))

-n, a, b, k = list(map(int, input().split())) -    for i in range(1, n + 1): -        inv[i] = pow(i, p - 2, p) +    # フェルマーの小定理より、i=1の時は1であることが分かる +    inv[1] = 1 +    for i in range(2, n + 1): +        # そのまま計算すると負になってしまうので、最後にmod pを取ることで正に戻す +        inv[i] = (-(p // i) * inv[p % i]) % p -def getnCr(n): +def getCmb(n): +    # 逆元を取得 +    # 0 <= r <= n に対してnCrを求める +    # r=0の時は、r-1が存在しないので与えておく +        # iで割る代わりにinv[i]をかけ、mod pを求める +    nCr = getCmb(n) -    nCr = getnCr(n) -        if (k - a * i) < 0 or (k - a * i) % b != 0: -            continue +        # 割り切れない時もあるが、その時は次の条件a*i+b*j==kで弾かれるので問題ない +        # 条件に一致するものを選ぶ。jの範囲に注意 -            ans += nCr[i] * nCr[j] +            ans += (nCr[i] * nCr[j]) % p +n, a, b, k = list(map(int, input().split()))