#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;
cin >> N >> A >> B >> K;
int ans = 0;
vector<int> fact(N + 1, 1);
FOR(i, 1, N + 1){
fact[i] = (fact[i - 1] * i) % M;
}
REP(a, N + 1){
if((K - a * A) % B == 0){
int b = (K - a * A) / B;
if(b < 0 || b > N) continue;
int tmp1 = (((fact[N] * mod_inverse(fact[a], M)) % M) * mod_inverse(fact[N - a], M)) % M;
int tmp2 = (((fact[N] * mod_inverse(fact[b], M)) % M) * mod_inverse(fact[N - b], 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]--;
}
}