#include <bits/stdc++.h>
using namespace std;
int read() {
  int xx = 0, ff = 1;
  char ch = getchar();
  while (ch > '9' || ch < '0') {
    if (ch == '-') ff = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    xx = (xx << 3) + (xx << 1) + ch - '0';
    ch = getchar();
  }
  return xx * ff;
}
long long READ() {
  long long xx = 0, ff = 1;
  char ch = getchar();
  while (ch > '9' || ch < '0') {
    if (ch == '-') ff = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    xx = (xx << 3) + (xx << 1) + ch - '0';
    ch = getchar();
  }
  return xx * ff;
}
int mypow(int x, int p, int MOD) {
  int re = 1;
  while (p) {
    if (p & 1) re = 1LL * re * x % MOD;
    p >>= 1;
    x = 1LL * x * x % MOD;
  }
  return re;
}
int a, b, p;
long long x, ans;
int main() {
  a = read(), b = read(), p = read();
  x = READ();
  if (p == 2) {
    cout << x / 2 + (x % 2 == 1) << endl;
    return 0;
  }
  long long mul = 1LL * p * (p - 1);
  for (int i = 0; i <= p - 2; i++) {
    int y = 1LL * b * mypow(mypow(a, i, p), p - 2, p) % p;
    long long temp = (1LL * i * p * mypow(p, p - 3, p - 1) % mul +
                      1LL * y * (p - 1) * mypow(p - 1, p - 2, p) % mul) %
                     mul;
    ans += x / mul + (x % mul >= temp);
  }
  cout << ans << endl;
  return 0;
}

### Prompt

Construct a cpp code solution to the problem outlined:

Given an integer x. Your task is to find out how many positive integers n (1 ≤ n ≤ x) satisfy $$$n ⋅ a^n ≡ b   (mod\;p), where a, b, p$$$ are all known constants.

Input

The only line contains four integers a,b,p,x (2 ≤ p ≤ 10^6+3, 1 ≤ a,b < p, 1 ≤ x ≤ 10^{12}). It is guaranteed that p is a prime.

Output

Print a single integer: the number of possible answers n.

Examples

Input

2 3 5 8


Output

2


Input

4 6 7 13


Output

1


Input

233 233 10007 1


Output

1

Note

In the first sample, we can see that n=2 and n=8 are possible answers.

### Response

```cpp
#include <bits/stdc++.h>
using namespace std;
int read() {
  int xx = 0, ff = 1;
  char ch = getchar();
  while (ch > '9' || ch < '0') {
    if (ch == '-') ff = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    xx = (xx << 3) + (xx << 1) + ch - '0';
    ch = getchar();
  }
  return xx * ff;
}
long long READ() {
  long long xx = 0, ff = 1;
  char ch = getchar();
  while (ch > '9' || ch < '0') {
    if (ch == '-') ff = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    xx = (xx << 3) + (xx << 1) + ch - '0';
    ch = getchar();
  }
  return xx * ff;
}
int mypow(int x, int p, int MOD) {
  int re = 1;
  while (p) {
    if (p & 1) re = 1LL * re * x % MOD;
    p >>= 1;
    x = 1LL * x * x % MOD;
  }
  return re;
}
int a, b, p;
long long x, ans;
int main() {
  a = read(), b = read(), p = read();
  x = READ();
  if (p == 2) {
    cout << x / 2 + (x % 2 == 1) << endl;
    return 0;
  }
  long long mul = 1LL * p * (p - 1);
  for (int i = 0; i <= p - 2; i++) {
    int y = 1LL * b * mypow(mypow(a, i, p), p - 2, p) % p;
    long long temp = (1LL * i * p * mypow(p, p - 3, p - 1) % mul +
                      1LL * y * (p - 1) * mypow(p - 1, p - 2, p) % mul) %
                     mul;
    ans += x / mul + (x % mul >= temp);
  }
  cout << ans << endl;
  return 0;
}

```