#include<cstdio>#include<cstring>#include<algorithm>#include<queue>#include<cmath>using namespace std;#define maxn 500010#define eps 1e-12#define INF 1e99struct point2{ double x,y; point2(){} point2(double _x,double _y) { x=_x; y=_y; }};const double pi = acos(-1.0);int dblcmp(double x){ if(fabs(x)<eps) return 0; return x<0?-1:1;}struct Line{ point2 a,b; double ang; };int e,n,sum;Line ll[maxn],deq[maxn];point2 res[maxn];double dis(point2 a,point2 b){ double dx=a.x-b.x; double dy=a.y-b.y; return sqrt(dx*dx+dy*dy);}double Cross(point2 k,point2 a,point2 b){ return (a.x-k.x)*(b.y-k.y)-(a.y-k.y)*(b.x-k.x);}void add(double a,double b,double c,double d){ ll[sum].a.x=a; ll[sum].a.y=b; ll[sum].b.x=c; ll[sum].b.y=d; ll[sum++].ang=atan2(d-b,c-a);}point2 ll_intersect(point2 s1,point2 e1,point2 s2,point2 e2){ double d1,d2; point2 pp; d1=Cross(s2,e1,s1),d2=Cross(e1,e2,s1); pp.x=(s2.x*d2+e2.x*d1)/(d1+d2); pp.y=(s2.y*d2+e2.y*d1)/(d1+d2); return pp;}bool is_in(Line& x,Line& y,Line& z){ point2 tmp=ll_intersect(x.a,x.b,y.a,y.b); return dblcmp(Cross(z.a,z.b,tmp))>0;}int cmp(Line a,Line b){ if(dblcmp(a.ang-b.ang)) return a.ang<b.ang; return dblcmp(Cross(b.a,b.b,a.a))>0;}void hp(int n){ int i,t; sort(ll,ll+n,cmp); for(i=t=1;i<n;++i) if(dblcmp(ll[i].ang-ll[t-1].ang)) ll[t++]=ll[i]; n=t; int bot=0,top=1; deq[0]=ll[0],deq[1]=ll[1]; for(i=2;i<n;++i) { while(bot<top&&!is_in(deq[top-1],deq[top],ll[i])) top--; while(bot<top&&!is_in(deq[bot+1],deq[bot],ll[i])) bot++; deq[++top]=ll[i]; } while(bot<top&&!is_in(deq[top-1],deq[top],deq[bot])) top--; while(bot<top&&!is_in(deq[bot+1],deq[bot],deq[top])) bot++; if(bot>=top-1) return; deq[++top]=deq[bot]; for(i=bot+1;i<=top;++i) res[e++]=ll_intersect(deq[i-1].a,deq[i-1].b,deq[i].a,deq[i].b); res[e++]=res[0];}double da,db;void init(){ int i,j; double a,b,k; int c; point2 l1,rr; scanf("%d",&n); e=sum=0; for(i=0;i<n;i++) { scanf("%lf %lf %lf %d",&a,&b,&k,&c); if(a==0&&b==0) continue; if(a==0) { if(b<0) c=-c; if(c>0) { l1=point2(0,k/b); rr=point2(1,k/b); } else { rr=point2(0,k/b); l1=point2(1,k/b); } add(l1.x,l1.y,rr.x,rr.y); continue; } if(b==0) { if(a<0) c=-c; else c=c; if(c>0) { l1=point2(k/a,1); rr=point2(k/a,0); } else { l1=point2(k/a,0); rr=point2(k/a,1); } add(l1.x,l1.y,rr.x,rr.y); continue; } double aa=-a/b; double bb=k/b; if(b<0) c=-c; else c=c; if(c>0) { l1=point2(0,bb); rr=point2(1,aa+bb); add(l1.x,l1.y,rr.x,rr.y); } else { rr=point2(0,bb); l1=point2(1,aa+bb); add(l1.x,l1.y,rr.x,rr.y); } } scanf("%lf %lf",&da,&db);}void solve(){ hp(sum); double ansx=INF; double ansy=-INF; for(int i=0;i<e;i++) { ansx=min(ansx,da*res[i].x+db*res[i].y); ansy=max(ansy,da*res[i].x+db*res[i].y); } printf("%.0lf %.0lfn",fabs((double)ceil(ansx+eps))<eps?0:(double)ceil(ansx+eps),fabs((double)floor(ansy-eps))<eps?0:(double)floor(ansy-eps));}int main(){ int ncase,i,j; scanf("%d",&ncase); while(ncase--) { init(); solve(); }}


