Given a positive integer m, we say that a sequence x_1, x_2, ..., x_n of positive integers is m-cute if for every index i such that 2 ≤ i ≤ n it holds that x_i = x_{i - 1} + x_{i - 2} + ... + x_1 + r_i for some positive integer r_i satisfying 1 ≤ r_i ≤ m.

You will be given q queries consisting of three positive integers a, b and m. For each query you must determine whether or not there exists an m-cute sequence whose first term is a and whose last term is b. If such a sequence exists, you must additionally find an example of it.

Input

The first line contains an integer number q (1 ≤ q ≤ 10^3) — the number of queries.

Each of the following q lines contains three integers a, b, and m (1 ≤ a, b, m ≤ 10^{14}, a ≤ b), describing a single query.

Output

For each query, if no m-cute sequence whose first term is a and whose last term is b exists, print -1.

Otherwise print an integer k (1 ≤ k ≤ 50), followed by k integers x_1, x_2, ..., x_k (1 ≤ x_i ≤ 10^{14}). These integers must satisfy x_1 = a, x_k = b, and that the sequence x_1, x_2, ..., x_k is m-cute.

It can be shown that under the problem constraints, for each query either no m-cute sequence exists, or there exists one with at most 50 terms.

If there are multiple possible sequences, you may print any of them.

Example

Input


2
5 26 2
3 9 1


Output


4 5 6 13 26
-1

Note

Consider the sample. In the first query, the sequence 5, 6, 13, 26 is valid since 6 = 5 + \bf{\color{blue} 1}, 13 = 6 + 5 + {\bf\color{blue} 2} and 26 = 13 + 6 + 5 + {\bf\color{blue} 2} have the bold values all between 1 and 2, so the sequence is 2-cute. Other valid sequences, such as 5, 7, 13, 26 are also accepted.

In the second query, the only possible 1-cute sequence starting at 3 is 3, 4, 8, 16, ..., which does not contain 9.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer; 
					  
					
					public class temp4 {
						static class FastReader 
					    { 
					        BufferedReader br; 
					        StringTokenizer st; 
					  
					        public FastReader() 
					        { 
					            br = new BufferedReader(new
					                     InputStreamReader(System.in)); 
					        } 
					  
					        String next() 
					        { 
					            while (st == null || !st.hasMoreElements()) 
					            { 
					                try
					                { 
					                    st = new StringTokenizer(br.readLine()); 
					                } 
					                catch (IOException  e) 
					                { 
					                    e.printStackTrace(); 
					                } 
					            } 
					            return st.nextToken(); 
					        } 
					  
					        int nextInt() 
					        { 
					            return Integer.parseInt(next()); 
					        } 
					  
					        long nextLong() 
					        { 
					            return Long.parseLong(next()); 
					        } 
					  
					        double nextDouble() 
					        { 
					            return Double.parseDouble(next()); 
					        } 
					  
					        String nextLine() 
					        { 
					            String str = ""; 
					            try
					            { 
					                str = br.readLine(); 
					            } 
					            catch (IOException e) 
					            { 
					                e.printStackTrace(); 
					            } 
					            return str; 
					        } 
					    } 
						
					/*	static class Reader 
					    { 
					        final private int BUFFER_SIZE = 1 << 16; 
					        private DataInputStream din; 
					        private byte[] buffer; 
					        private int bufferPointer, bytesRead; 
					  
					        public Reader() 
					        { 
					            din = new DataInputStream(System.in); 
					            buffer = new byte[BUFFER_SIZE]; 
					            bufferPointer = bytesRead = 0; 
					        } 
					  
					        public Reader(String file_name) throws IOException 
					        { 
					            din = new DataInputStream(new FileInputStream(file_name)); 
					            buffer = new byte[BUFFER_SIZE]; 
					            bufferPointer = bytesRead = 0; 
					        } 
					  
					        public String readLine() throws IOException 
					        { 
					            byte[] buf = new byte[64]; // line length 
					            int cnt = 0, c; 
					            while ((c = read()) != -1) 
					            { 
					                if (c == '\n') 
					                    break; 
					                buf[cnt++] = (byte) c; 
					            } 
					            return new String(buf, 0, cnt); 
					        } 
					  
					        public int nextInt() throws IOException 
					        { 
					            int ret = 0; 
					            byte c = read(); 
					            while (c <= ' ') 
					                c = read(); 
					            boolean neg = (c == '-'); 
					            if (neg) 
					                c = read(); 
					            do
					            { 
					                ret = ret * 10 + c - '0'; 
					            }  while ((c = read()) >= '0' && c <= '9'); 
					  
					            if (neg) 
					                return -ret; 
					            return ret; 
					        } 
					  
					        public long nextLong() throws IOException 
					        { 
					            long ret = 0; 
					            byte c = read(); 
					            while (c <= ' ') 
					                c = read(); 
					            boolean neg = (c == '-'); 
					            if (neg) 
					                c = read(); 
					            do { 
					                ret = ret * 10 + c - '0'; 
					            } 
					            while ((c = read()) >= '0' && c <= '9'); 
					            if (neg) 
					                return -ret; 
					            return ret; 
					        } 
					  
					        public double nextDouble() throws IOException 
					        { 
					            double ret = 0, div = 1; 
					            byte c = read(); 
					            while (c <= ' ') 
					                c = read(); 
					            boolean neg = (c == '-'); 
					            if (neg) 
					                c = read(); 
					  
					            do { 
					                ret = ret * 10 + c - '0'; 
					            } 
					            while ((c = read()) >= '0' && c <= '9'); 
					  
					            if (c == '.') 
					            { 
					                while ((c = read()) >= '0' && c <= '9') 
					                { 
					                    ret += (c - '0') / (div *= 10); 
					                } 
					            } 
					  
					            if (neg) 
					                return -ret; 
					            return ret; 
					        } 
					  
					        private void fillBuffer() throws IOException 
					        { 
					            bytesRead = din.read(buffer, bufferPointer = 0, BUFFER_SIZE); 
					            if (bytesRead == -1) 
					                buffer[0] = -1; 
					        } 
					  
					        private byte read() throws IOException 
					        { 
					            if (bufferPointer == bytesRead) 
					                fillBuffer(); 
					            return buffer[bufferPointer++]; 
					        } 
					  
					        public void close() throws IOException 
					        { 
					            if (din == null) 
					                return; 
					            din.close(); 
					        } 
					    } */
						static class Print
					{
						    private final BufferedWriter bw;
						    public Print()
						    {
						        bw=new BufferedWriter(new OutputStreamWriter(System.out));
						    }
					    public void print(String str)throws IOException
						    {
						        bw.append(str);
						    }
						    public void println(String str)throws IOException
						    {
						        print(str);
						        bw.append("\n");
						    }
						    public void close()throws IOException
						    {
						        bw.close();
						    }} 
							
							
							
							public static void main(String[] args) throws IOException {			
								FastReader scn=new FastReader();
								Print pr=new Print();
								long a=0,b=0,m=0,q=scn.nextLong(),cnt=0,diff=0,prevsum=0;
								long[] ans=new long[60];
								for(int i=0;i<q;i++){
									a=scn.nextLong();b=scn.nextLong();m=scn.nextLong();
									if(a==b){
										pr.println("1 "+a);continue;
									}
									cnt=2;
									while(((long)1<<(cnt-2))*(a+m)<b)cnt++;
									if(((long)1<<(cnt-2))*(a+1)>b){
										pr.println("-1");continue;
									}
									diff=b-((long)1<<(cnt-2))*a;
									ans[1]=a;
									prevsum=a;
									for(int j=2;j<cnt;j++){
										long add=Math.min(m, diff/((long)1<<cnt-j-1)-1);
										diff-=((long)1<<(cnt-j-1))*add;
										ans[j]=prevsum+add;
										prevsum+=ans[j];
									}
									ans[(int) cnt]=b;
								//	pr.print(cnt+" ");
									StringBuilder s=new StringBuilder();
									s.append(cnt+" ");
									for(int j=1;j<=cnt;j++){
										s.append(ans[j]+" ");
									}
									pr.println(s.toString());
								}
								pr.close();
								
							}
							
						
						
								public static class node{
								int a;
								int b;
								public node(int a,int b){
									this.a=a;this.b=b;
								}
							}
							
					}
						