#include using namespace std; using ll = long long; using vll = vector; #define rep(i, x) for (ll i = 0; i < x; ++i) template T extgcd(T a, T b, T &x, T &y) { T d = a; if (b != 0) { d = extgcd(b, a % b, y, x); y -= (a / b) * x; } else { x = 1; y = 0; } return d; } ll safe_mod(ll a, ll m) { return (a % m + m) % m; } int main () { ll n = 3; vll R(n), M(n); rep(i, n) { cin >> R[i] >> M[i]; } ll r = 0; ll m = 1; rep(i, n) { ll p, q; ll d = extgcd(m, M[i], p, q); if ((R[i] - r) % d != 0) { cout << -1 << endl; return 0; } ll m2_d = M[i] / d; ll m_next = m * M[i] / d; // mとM[i]の最小公倍数 m_nextを法とする剰余環が中国式剰余定理より同型。 ll tmp = safe_mod(p, m2_d) * safe_mod((R[i] - r) / d, m2_d) % m2_d; ll r_next = safe_mod(r + tmp * m, m_next); r = r_next; m = m_next; } // 答えは正の整数でなくてはならない if (r == 0) { r += m; } cout << r << endl; }