#include using namespace std; #define ll long long #define u128 unsigned __int128 const ll maxn=200005; const ll inf=1e18; struct BI{ vector v; BI(u128 x=0){ if(x)v.push_back(x); } void trim(){ while(v.size() and not v.back())v.pop_back(); } bool operator<(const BI& o)const{ if(v.size()!=o.v.size())return v.size()=0;i--)if(v[i]!=o.v[i])return v[i](const BI& o)const{ return o<*this; } bool operator<=(const BI& o)const{ return not(*this>o); } bool operator>=(const BI& o)const{ return not(*this=0;i--){ cur.v.insert(cur.v.begin(),v[i]); cur.trim(); u128 l=0,r=inf-1,ans=0; while(l<=r){ u128 mid=(l+r)/2; if(o*BI(mid)<=cur)ans=mid,l=mid+1; else r=mid-1; } q.v[i]=ans; cur=cur-(o*BI(ans)); } q.trim(); return q; } void pr(){ if(v.empty()){ printf("0"); return; } printf("%llu",(unsigned long long)v.back()); for(int i=(int)v.size()-2;i>=0;i--)printf("%018llu",(unsigned long long)v[i]); } }; u128 solve(u128 a,u128 b,u128 l,u128 r){ if(l>r)return -1; if(not l)return 0; if(not a)return -1; u128 k=(l+a-1)/a; if(k*a<=r)return k; u128 sub=solve(b%a,a,(a-r%a)%a,(a-l%a)%a); if(sub==(u128)-1)return -1; return (sub*b+l+a-1)/a; } int main(){ int t; scanf("%d",&t); while(t--){ ll di,ai,bi,ki,v_val; u128 d,a,b,k,rm,ry,p,v_abs; BI q_final,k_st,p1,p2,kb,k1b,l_q,r_q,dk,num,mn,act,q,fl,t1,t2,df,x; bool v_neg=false,found=false; scanf("%lld%lld%lld%lld",&di,&ai,&bi,&ki); d=di,a=ai,b=bi,k=ki; rm=a%d; ry=(rm*b)/d; p=rm*b-d*ry; v_val=(ll)d*(ll)(k+1)-(ll)a+1; if(v_val<0) v_neg=true,v_abs=-v_val; else v_abs=v_val; if(v_val<=0){ q_final=BI(0); found=true; } else if(rm==0){ } else if(p==0){ BI nm=BI(b)*BI(v_abs)+BI(d)-BI(1),dn(d),lm=nm/dn; if(lmp2) k_st=(p1-p2)/BI(p); else k_st=BI(0); for(int i=0;i<2;i++){ BI cur=k_st+BI(i); kb=cur*BI(b); k1b=(cur+BI(1))*BI(b); l_q=(kb+BI(ry)-BI(1))/BI(ry); r_q=(k1b+BI(ry)-BI(1))/BI(ry); dk=BI(d)*cur; if(v_neg){ if(dk>=BI(v_abs)) num=dk-BI(v_abs),mn=(num+BI(rm)-BI(1))/BI(rm); else mn=BI(0); } else num=BI(v_abs)+dk,mn=(num+BI(rm)-BI(1))/BI(rm); act=l_q; if(mn>act)act=mn; if(actt2) df=t1-t2; else df=BI(0); x=q*BI(a)+df; x.pr(); printf("\n"); } } return 0; }