def floor_sum(n,m,a,b): ans=0 while True: if a>=m: ans+=(n-1)*n*(a//m)//2 a%=m if b>=m: ans+=n*(b//m) b%=m y_max=(a*n+b)//m x_max=(y_max*m-b) if y_max==0: return ans ans+=(n-(x_max+a-1)//a)*y_max n,m,a,b=y_max,a,m,(a-x_max%a)%a def calc1(p,q,n): x=(q*n)//p return (x+1)*n-floor_sum(x+1,q,p,0) def calc2(p,q,n,m): ng,ok=q,0 while abs(ok-ng)>1: mid=(ok+ng)//2 if floor_sum(n,q,p,q-mid)-floor_sum(n,q,p,0)>=n+1-m: ok=mid else: ng=mid return ok import math def solve(p,q,k): g=math.gcd(p,q) p,q=min(p,q)//g,max(p,q)//g m=q*(p-1)-(p-1)*(q-1)//2 if k>m: res=k-m-1+q*(p-1) return res*g ng,ok=0,p+1 while abs(ok-ng)>1: mid=(ok+ng)//2 if k<=calc1(p,q,mid): ok=mid else: ng=mid if ok==0: x=k else: x=k-calc1(p,q,ok-1) return (q*(ok-1)+calc2(p,q,(ok*q)//p+1,x))*g t=int(input()) for _ in range(t): p,q,k=map(int,input().split()) print(solve(p,q,k+1))