# A * x + B * (C * x + D) // M + E def yuki3397(N, M, A, B, C, D, E=0): if N == 0: return -(2**256) assert M > 0 C0, C = divmod(C, M) A += B * C0 D0, D = divmod(D, M) E += B * D0 f = lambda x: A * x + B * ((C * x + D) // M) + E if A >= 0 and B >= 0 or A <= 0 and B <= 0 or C == 0 or N <= 2: return max(f(0), f(N - 1)) if A > 0 and B < 0: return max(yuki3397((C * (N - 1) + D) // M, C, B, A, M, M - D - 1, E), f(N - 1)) if A < 0 and B > 0: return max( yuki3397((C * (N - 1) + D) // M, C, B, A, M, M + C - D - 1, B + E), f(0) ) # min x. x // D - (x // A) * (A * B // D) // B > K # x = y * D # M = A * B // D # x // D - (x // A) * M // B > K # y - (D * y // A) * M // B > K # B * y - M * (D * y // A) > K * B def solve(D, A, B, K, Y): return yuki3397(Y, A, B, -(A * B // D), D, 0) <= K * B def main(): T = int(input()) for _ in range(T): D, A, B, K = map(int, input().split()) def check(x): return solve(D, A, B, K, x) ok = 0 ng = 1 while check(ng): ng *= 2 if ng > 2**256: break while ng - ok > 1: mid = (ok + ng) // 2 if check(mid): ok = mid else: ng = mid if not check(ng): print(ok * D) else: print(-1) if __name__ == "__main__": main()