```go
package main
import (
"bufio"
"fmt"
"os"
)
func cappedMul(a, b, capv int64) int64 {
if a == 0 || b == 0 {
return 0
}
if a > (capv+1)/b {
return capv + 1
}
return a * b
}
func main() {
in := bufio.NewReader(os.Stdin)
out := bufio.NewWriter(os.Stdout)
defer out.Flush()
var q int
if _, err := fmt.Fscan(in, &q); err != nil {
return
}
for ; q > 0; q-- {
var a, b, m int64
fmt.Fscan(in, &a, &b, &m)
if a == b {
fmt.Fprintf(out, "1 %d\n", a)
continue
}
found := false
var k int
var p int64
for k = 2; k <= 50; k++ {
p = int64(1) << uint(k-2)
minC := cappedMul(p, a+1, b)
if minC > b {
break
}
maxC := cappedMul(p, a+m, b)
if maxC < b {
continue
}
found = true
break
}
if !found {
fmt.Fprintln(out, -1)
continue
}
minExact := p * (a + 1)
rem := b - minExact
r := make([]int64, k+1)
for i := 2; i <= k; i++ {
var w int64
if i == k {
w = 1
} else {
w = int64(1) << uint(k-1-i)
}
d := rem / w
if d > m-1 {
d = m - 1
}
r[i] = 1 + d
rem -= d * w
}
ans := make([]int64, k)
ans[0] = a
sum := a
for i := 2; i <= k; i++ {
x := sum + r[i]
ans[i-1] = x
sum += x
}
fmt.Fprintf(out, "%d", k)
for i := 0; i < k; i++ {
fmt.Fprintf(out, " %d", ans[i])
}
fmt.Fprintln(out)
}
}
```