#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int INF = 1e9;
const ll LINF = 1e18;
const int MOD = 998244353;
void add(int& a, int b) {
a += b;
if (a >= MOD) a -= MOD;
}
int a[3];
vector<int> digit;
vector<int> getDigit(ll N) {
vector<int> ans;
for (; N > 0; N /= 2) ans.push_back(N % 2);
return ans;
}
int memo[60][2][2][2][2][2][2][10][10][10];
// l(i) là điều kiện larger của số thứ i
// s(i) là điều kiện smaller của số thứ i
// r(i) là số dư của phần prefix của số thứ i khi chia cho a(i)
int dp(int idx, int l0, int l1, int l2, int s0, int s1, int s2, int r0, int r1, int r2) {
if (idx == -1) {
return (r0 == 0 && r1 == 0 && r2 == 0);
}
int& ans = memo[idx][l0][l1][l2][s0][s1][s2][r0][r1][r2];
if (ans != -1) return ans;
ans = 0;
int digit_one = (idx == 0) ? 1 : 0;
int min_digit_x0 = (l0) ? 0 : digit_one, max_digit_x0 = (s0) ? 1 : digit[idx];
int min_digit_x1 = (l1) ? 0 : digit_one, max_digit_x1 = (s1) ? 1 : digit[idx];
int min_digit_x2 = (l2) ? 0 : digit_one, max_digit_x2 = (s2) ? 1 : digit[idx];
for (int i = min_digit_x0; i <= max_digit_x0; i++) {
for (int j = min_digit_x1; j <= max_digit_x1; j++) {
for (int k = min_digit_x2; k <= max_digit_x2; k++) {
if ((i ^ j ^ k) != 0) continue;
add(ans, dp(idx - 1, l0 | (i > digit_one), l1 | (j > digit_one), l2 | (k > digit_one),
s0 | (i < digit[idx]), s1 | (j < digit[idx]), s2 | (k < digit[idx]),
(r0 * 2 + i) % a[0], (r1 * 2 + j) % a[1], (r2 * 2 + k) % a[2]));
}
}
}
return ans;
}
int solve(ll N) {
digit = getDigit(N);
memset(memo, -1, sizeof memo);
return dp(digit.size() - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0);
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
ll N;
cin >> N;
for (int i = 0; i < 3; i++) cin >> a[i];
int ans = solve(N);
cout << ans << '\n';
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsgIAoKdHlwZWRlZiBsb25nIGxvbmcgbGw7ICAKdHlwZWRlZiBwYWlyPGludCwgaW50PiBpaTsgIAoKY29uc3QgaW50IElORiA9IDFlOTsgIApjb25zdCBsbCBMSU5GID0gMWUxODsgIAoKY29uc3QgaW50IE1PRCA9IDk5ODI0NDM1MzsgCgp2b2lkIGFkZChpbnQmIGEsIGludCBiKSB7CglhICs9IGI7IAoJaWYgKGEgPj0gTU9EKSBhIC09IE1PRDsgCn0KCmludCBhWzNdOyAKCnZlY3RvcjxpbnQ+IGRpZ2l0OyAKCnZlY3RvcjxpbnQ+IGdldERpZ2l0KGxsIE4pIHsKCXZlY3RvcjxpbnQ+IGFuczsgIAoJZm9yICg7IE4gPiAwOyBOIC89IDIpIGFucy5wdXNoX2JhY2soTiAlIDIpOyAKCXJldHVybiBhbnM7IAp9CgppbnQgbWVtb1s2MF1bMl1bMl1bMl1bMl1bMl1bMl1bMTBdWzEwXVsxMF07IAoKLy8gbChpKSBsw6AgxJFp4buBdSBraeG7h24gbGFyZ2VyIGPhu6dhIHPhu5EgdGjhu6kgaQovLyBzKGkpIGzDoCDEkWnhu4F1IGtp4buHbiBzbWFsbGVyIGPhu6dhIHPhu5EgdGjhu6kgaQovLyByKGkpIGzDoCBz4buRIGTGsCBj4bunYSBwaOG6p24gcHJlZml4IGPhu6dhIHPhu5EgdGjhu6kgaSBraGkgY2hpYSBjaG8gYShpKSAgCmludCBkcChpbnQgaWR4LCBpbnQgbDAsIGludCBsMSwgaW50IGwyLCBpbnQgczAsIGludCBzMSwgaW50IHMyLCBpbnQgcjAsIGludCByMSwgaW50IHIyKSB7CglpZiAoaWR4ID09IC0xKSB7CgkJcmV0dXJuIChyMCA9PSAwICYmIHIxID09IDAgJiYgcjIgPT0gMCk7IAoJfQoKCWludCYgYW5zID0gbWVtb1tpZHhdW2wwXVtsMV1bbDJdW3MwXVtzMV1bczJdW3IwXVtyMV1bcjJdOyAKCWlmIChhbnMgIT0gLTEpIHJldHVybiBhbnM7IAoKCWFucyA9IDA7ICAgCglpbnQgZGlnaXRfb25lID0gKGlkeCA9PSAwKSA/IDEgOiAwOyAgCglpbnQgbWluX2RpZ2l0X3gwID0gKGwwKSA/IDAgOiBkaWdpdF9vbmUsIG1heF9kaWdpdF94MCA9IChzMCkgPyAxIDogZGlnaXRbaWR4XTsKCWludCBtaW5fZGlnaXRfeDEgPSAobDEpID8gMCA6IGRpZ2l0X29uZSwgbWF4X2RpZ2l0X3gxID0gKHMxKSA/IDEgOiBkaWdpdFtpZHhdOyAKCWludCBtaW5fZGlnaXRfeDIgPSAobDIpID8gMCA6IGRpZ2l0X29uZSwgbWF4X2RpZ2l0X3gyID0gKHMyKSA/IDEgOiBkaWdpdFtpZHhdOyAKCglmb3IgKGludCBpID0gbWluX2RpZ2l0X3gwOyBpIDw9IG1heF9kaWdpdF94MDsgaSsrKSB7CgkJZm9yIChpbnQgaiA9IG1pbl9kaWdpdF94MTsgaiA8PSBtYXhfZGlnaXRfeDE7IGorKykgewoJCQlmb3IgKGludCBrID0gbWluX2RpZ2l0X3gyOyBrIDw9IG1heF9kaWdpdF94MjsgaysrKSB7CgkJCQlpZiAoKGkgXiBqIF4gaykgIT0gMCkgY29udGludWU7IAoJCQkJYWRkKGFucywgZHAoaWR4IC0gMSwgbDAgfCAoaSA+IGRpZ2l0X29uZSksIGwxIHwgKGogPiBkaWdpdF9vbmUpLCBsMiB8IChrID4gZGlnaXRfb25lKSwgCgkJCQkJCQkJICAgczAgfCAoaSA8IGRpZ2l0W2lkeF0pLCBzMSB8IChqIDwgZGlnaXRbaWR4XSksIHMyIHwgKGsgPCBkaWdpdFtpZHhdKSwgCgkJCQkJCQkJICAgKHIwICogMiArIGkpICUgYVswXSwgKHIxICogMiArIGopICUgYVsxXSwgKHIyICogMiArIGspICUgYVsyXSkpOyAKCQkJfQoJCX0KCX0JICAKCglyZXR1cm4gYW5zOyAKfQoKaW50IHNvbHZlKGxsIE4pIHsKCWRpZ2l0ID0gZ2V0RGlnaXQoTik7IAoJbWVtc2V0KG1lbW8sIC0xLCBzaXplb2YgbWVtbyk7IAoJcmV0dXJuIGRwKGRpZ2l0LnNpemUoKSAtIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDApOwp9CgppbnQgbWFpbigpIHsKCWlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsgCgljaW4udGllKG51bGxwdHIpOyAKCWxsIE47IAoJY2luID4+IE47IAoJZm9yIChpbnQgaSA9IDA7IGkgPCAzOyBpKyspIGNpbiA+PiBhW2ldOyAKCWludCBhbnMgPSBzb2x2ZShOKTsgCgljb3V0IDw8IGFucyA8PCAnXG4nOyAKfQ==