import java.util.*; import java.io.*; import java.text.*; //Solution Credits: Taranpreet Singh public class Main{ //SOLUTION BEGIN void solve(int TC) throws Exception{ int n = ni();long c1 = nl(), c2 = nl(); long[] v = new long[1+n]; for(int i = 1; i<= n;i++)v[i] = nl(); if(n%2==1){pn(-1);return;} Frac min = new Frac(0, 1); long s1 = 0, s2 = 0; for(int i = 1; i< n; i++){ if(i%2==1)s1+=v[i]; else s2+=v[i]; Frac tmp = new Frac(s2,s1); if(min.compareTo(tmp)<0)min = tmp; } s2+=v[n]; Frac max = new Frac(s2, s1); if(min.compareTo(max)>=0)pn(-1); else{ long[][] f1 = new long[2][], f2 = new long[2][]; f1 = continued(min); f2 = continued(max); for(int i = 0; i< 4; i++){ Frac ans = getFrac(f1[i/2], f2[i%2]); if(ans.num <= c1 && ans.den <= c2 && min.compareTo(ans)<0 && ans.compareTo(max)<0){ pn(ans.num+" " + ans.den); return; } } pn(-1); } } Frac getFrac(long[] f){ long a = f[f.length-1], b = 1; for(int i = f.length-2; i>= 0; i--){ long x = f[i]*a+b; long d = gcd(x, a); b = a/d; a = x/d; } return new Frac(a, b); } Frac getFrac(long[] f1, long[] f2){ long[] f = new long[Math.max(f1.length, f2.length) +1]; int c = 0; while(c< Math.min(f1.length, f2.length) && f1[c]==f2[c])f[c] = f1[c++]; if(c0){ f0[c] = tmp.num/tmp.den;f1[c] = f0[c]; tmp = new Frac(tmp.den, tmp.num-f0[c]*tmp.den); c++; } f1[c-1]--;f1[c] = 1; return new long[][]{Arrays.copyOfRange(f0, 0, c), Arrays.copyOfRange(f1, 0, c+1)}; } class Frac implements Comparable{ long num, den; public Frac(long n, long d){ num = n; den = d; if(den<0){num*=-1;den*=-1;} // long g = gcd(Math.abs(num), den); // num/=g;den/=g; } public int compareTo(Frac f){ if(num*f.den < den*f.num)return -1; if(num*f.den > den*f.num)return 1; return 0; } public String toString(){ return num+" " +den; } } //SOLUTION END long mod = (long)1e9+7, IINF = (long)5e18; final int INF = (int)2e9, MAX = (int)2e5+1; DecimalFormat df = new DecimalFormat("0.000000000"); double PI = 3.1415926535897932384626433832792884197169399375105820974944, eps = 1e-8; static boolean multipleTC = true, memory = false; FastReader in;PrintWriter out; void run() throws Exception{ in = new FastReader(); out = new PrintWriter(System.out); int T = (multipleTC)?ni():1; //Solution Credits: Taranpreet Singh for(int i = 1; i<= T; i++)solve(i); out.flush(); out.close(); } public static void main(String[] args) throws Exception{ if(memory)new Thread(null, new Runnable() {public void run(){try{new Main().run();}catch(Exception e){e.printStackTrace();}}}, "1", 1 << 28).start(); else new Main().run(); } long gcd(long a, long b){return (b==0)?a:gcd(b,a%b);} int gcd(int a, int b){return (b==0)?a:gcd(b,a%b);} int bit(long n){return (n==0)?0:(1+bit(n&(n-1)));} void p(Object o){out.print(o);} void pn(Object o){out.println(o);} void pni(Object o){out.println(o);out.flush();} String n(){return in.next();} String nln(){return in.nextLine();} int ni(){return Integer.parseInt(in.next());} long nl(){return Long.parseLong(in.next());} double nd(){return Double.parseDouble(in.next());} class FastReader{ BufferedReader br; StringTokenizer st; public FastReader(){ br = new BufferedReader(new InputStreamReader(System.in)); } public FastReader(String s) throws Exception{ br = new BufferedReader(new FileReader(s)); } String next(){ while (st == null || !st.hasMoreElements()){ try{ st = new StringTokenizer(br.readLine()); }catch (IOException e){ e.printStackTrace(); } } return st.nextToken(); } String nextLine(){ String str = ""; try{ str = br.readLine(); }catch (IOException e){ e.printStackTrace(); } return str; } } }