def extended_gcd(a, b): if b == 0: return a, 1, 0 else: d, x, y = extended_gcd(b, a % b) return d, y, x - (a // b) * y def count_valid_y(n, m, x, p, f): d, _, _ = extended_gcd(x, p) if f % d != 0: return 0 else: p_div_d = p // d f_div_d = f // d y0 = (f_div_d * extended_gcd(x // d, p_div_d)[1]) % p_div_d count = 0 if y0 == 0: y0 = p_div_d while y0 <= m: if (x * y0) % p == f: count += 1 y0 += p_div_d return count def solve(N, M, P, Q, queries): results = [] for x, f in queries: result = count_valid_y(N, M, x, P, f) results.append(result) return results N, M, P, Q = map(int, input().split()) queries = [list(map(int, input().split())) for _ in range(Q)] results = solve(N, M, P, Q, queries) for result in results: print(result)