#include <algorithm>
#include <iostream>
constexpr unsigned exponent = 31;
constexpr unsigned two_to_exponent = 1u << exponent;
unsigned solve_p_even(unsigned n,unsigned s, unsigned p, unsigned q) {
if (p == 0) {
if (s == q)
return 1;
return 2;
}
if (s == 0 && q == 0)
return 1;
unsigned a1_minus_a0 = (p - 1) * s + q;
unsigned numerator = exponent - __builtin_popcount((a1_minus_a0 & -a1_minus_a0) - 1);
unsigned denominator = __builtin_popcount((p & -p) - 1);
unsigned m = numerator / denominator + (numerator % denominator == 0 ? 1 : 2);
return std::min(m , n);
}
unsigned solve_p_odd(unsigned n,unsigned s, unsigned p, unsigned q) {
if (p == 1)
return q == 0 ? 1 : std::min(n, two_to_exponent / (q & -q));
if (s == 0 && q == 0)
return 1;
unsigned m = 1;
unsigned long long p_minus_1 = p - 1;
unsigned long long a1_minus_a0 = p_minus_1 * s + q;
unsigned long long p_to_m = p;
unsigned long long mask = (two_to_exponent *
(p_minus_1 & -p_minus_1) / (a1_minus_a0 & -a1_minus_a0)) - 1;
while (m < n && (p_to_m & mask) != 1) {
p_to_m = p_to_m * p_to_m;
m = m * 2;
}
return std::min(m, n);
}
unsigned solve(unsigned n, unsigned s, unsigned p, unsigned q) {
if (p % 2 == 0)
return solve_p_even(n, s, p, q);
return solve_p_odd(n, s, p, q);
}
int main() {
unsigned n, s, p, q;
std::cin >> n >> s >> p >> q;
std::cout << solve(n, s, p, q);
return 0;
}
I2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGlvc3RyZWFtPgoKY29uc3RleHByIHVuc2lnbmVkIGV4cG9uZW50ICAgICAgICA9IDMxOwpjb25zdGV4cHIgdW5zaWduZWQgdHdvX3RvX2V4cG9uZW50ID0gMXUgPDwgZXhwb25lbnQ7Cgp1bnNpZ25lZCBzb2x2ZV9wX2V2ZW4odW5zaWduZWQgbix1bnNpZ25lZCBzLCB1bnNpZ25lZCBwLCB1bnNpZ25lZCBxKSB7CgogICAgaWYgKHAgPT0gMCkgewogICAgICAgIGlmIChzID09IHEpCiAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgIHJldHVybiAyOwogICAgfQogICAgCiAgICBpZiAocyA9PSAwICYmIHEgPT0gMCkKICAgICAgICByZXR1cm4gMTsKICAgIAogICAgdW5zaWduZWQgYTFfbWludXNfYTAgPSAocCAtIDEpICogcyArIHE7CiAgICB1bnNpZ25lZCBudW1lcmF0b3IgICA9IGV4cG9uZW50IC0gX19idWlsdGluX3BvcGNvdW50KChhMV9taW51c19hMCAmIC1hMV9taW51c19hMCkgLSAxKTsKICAgIHVuc2lnbmVkIGRlbm9taW5hdG9yID0gX19idWlsdGluX3BvcGNvdW50KChwICYgLXApIC0gMSk7CiAgICB1bnNpZ25lZCBtICAgICAgICAgICA9IG51bWVyYXRvciAvIGRlbm9taW5hdG9yICsgKG51bWVyYXRvciAlIGRlbm9taW5hdG9yID09IDAgPyAxIDogMik7CiAgICByZXR1cm4gc3RkOjptaW4obSAsIG4pOwp9Cgp1bnNpZ25lZCBzb2x2ZV9wX29kZCh1bnNpZ25lZCBuLHVuc2lnbmVkIHMsIHVuc2lnbmVkIHAsIHVuc2lnbmVkIHEpIHsKICAgIAogICAgaWYgKHAgPT0gMSkKICAgICAgICByZXR1cm4gcSA9PSAwID8gMSA6IHN0ZDo6bWluKG4sIHR3b190b19leHBvbmVudCAvIChxICYgLXEpKTsKCiAgICBpZiAocyA9PSAwICYmIHEgPT0gMCkKICAgICAgICByZXR1cm4gMTsKICAgIAogICAgdW5zaWduZWQgICAgICAgICAgIG0gICAgICAgICAgID0gMTsKICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBwX21pbnVzXzEgICA9IHAgLSAxOwogICAgdW5zaWduZWQgbG9uZyBsb25nIGExX21pbnVzX2EwID0gcF9taW51c18xICogcyArIHE7CiAgICB1bnNpZ25lZCBsb25nIGxvbmcgcF90b19tICAgICAgPSBwOwogICAgdW5zaWduZWQgbG9uZyBsb25nIG1hc2sgICAgICAgID0gKHR3b190b19leHBvbmVudCAqCiAgICAgICAgKHBfbWludXNfMSAmIC1wX21pbnVzXzEpIC8gKGExX21pbnVzX2EwICYgLWExX21pbnVzX2EwKSkgLSAxOwogICAgCiAgICB3aGlsZSAobSA8IG4gJiYgKHBfdG9fbSAmIG1hc2spICE9IDEpIHsKICAgICAgICBwX3RvX20gPSBwX3RvX20gKiBwX3RvX207CiAgICAgICAgbSAgICAgID0gbSAqIDI7CiAgICB9CiAgICAKICAgIHJldHVybiBzdGQ6Om1pbihtLCBuKTsKfQoKdW5zaWduZWQgc29sdmUodW5zaWduZWQgbiwgdW5zaWduZWQgcywgdW5zaWduZWQgcCwgdW5zaWduZWQgcSkgewogICAgaWYgKHAgJSAyID09IDApCiAgICAgICAgcmV0dXJuIHNvbHZlX3BfZXZlbihuLCBzLCBwLCBxKTsKICAgIHJldHVybiBzb2x2ZV9wX29kZChuLCBzLCBwLCBxKTsKfQoKaW50IG1haW4oKSB7CiAgICB1bnNpZ25lZCBuLCBzLCBwLCBxOwogICAgc3RkOjpjaW4gPj4gbiA+PiBzID4+IHAgPj4gcTsKICAgIHN0ZDo6Y291dCA8PCBzb2x2ZShuLCBzLCBwLCBxKTsKICAgIHJldHVybiAwOwp9Cg==