fact = [0,1] for b in range(2, 37): ps = [] cnts = [] for p in range(2, 32): cnt = 0 while b % p == 0: cnt += 1 b //= p if cnt: ps.append(p) cnts.append(cnt) fact.append((ps, cnts)) for _ in range(int(input())): seed, n, k, b = map(int, input().split()) x = [seed] now = seed for i in range(n): now = 1 + (now * (now + 12345)) % 100000009 x.append(now) ps, cnts = fact[b] xp = [] for xi in x: d = [] for p in ps: cnt = 0 while xi % p == 0: cnt += 1 xi //= p d.append(cnt) xp.append(tuple(d)) ans = 10 ** 9 for i in range(len(ps)): xp.sort(key=lambda x: x[i]) d = [0] * len(ps) for xpcnts in xp[:k]: for j, cnt in enumerate(xpcnts): d[j] += cnt t = min(di // ci for di, ci in zip(d, cnts)) ans = min(ans, t) print(ans)