#include <bits/stdc++.h>
#define FOR(i, begin, end) for(int i=(begin);i<(end);i++)
#define REP(i, n) FOR(i,0,n)
#define SORT(a) sort(a.begin(), a.end())
#define int long long
using namespace std;
typedef pair<int, int> Pii;
template<typename T>
void readvec(vector<T> &a);
void readindex(vector<int> &a);
int extgcd(int a, int b, int &x, int &y){
int d = a;
if(b != 0){
d = extgcd(b, a % b, y, x);
y -= (a / b) * x;
}else{
x = 1;
y = 0;
}
return d;
}
int mod_inverse(int a, int m){
int x, y;
extgcd(a, m, x, y);
return (m + x % m) % m;
}
signed main(){
int M = 998244353;
int N, A, B, K, x, y;
cin >> N >> A >> B >> K;
int g = extgcd(A, B, x, y);
if(K % g != 0){
cout << 0;
return 0;
}
x *= K / g;
y *= K / g;
//これでAx+By=K
int a = A / g;
int b = B / g;
//X=x+kb,Y=y-ka
int k_min = -1 * (x / b);
int k_max = y / a;
vector<int> fact(N + 1, 1);
FOR(i, 1, N + 1){
fact[i] = (fact[i - 1] * i) % M;
}
int ans = 0;
FOR(k, k_min, k_max + 1){
int X = x + k * b;
int Y = y - k * a;
if(X < 0 || Y < 0 || X > N || Y > N) continue;
int tmp1 = (((fact[N] * mod_inverse(fact[X], M)) % M) * mod_inverse(fact[N - X], M)) % M;
int tmp2 = (((fact[N] * mod_inverse(fact[Y], M)) % M) * mod_inverse(fact[N - Y], M)) % M;
ans = (ans + tmp1 * tmp2) % M;
}
cout << ans;
return 0;
}
template<typename T>
void readvec(vector<T> &a){
REP(i, a.size()){
cin >> a[i];
}
}
void readindex(vector<int> &a){
REP(i, a.size()){
cin >> a[i];
a[i]--;
}
}