← Home
package main

import (
	"bufio"
	"fmt"
	"os"
)

func solveCase(x, y, z, k int64) int64 {
	const INF int64 = 1<<62
	ans := INF
	base := int64(0)

	for p := int64(1); base < z; p++ {
		prefix := (p - 1) * y
		if prefix+x+y >= ans {
			break
		}

		L := (p-1)*k + 1
		U := p * k
		R := z - base

		for i := L; i <= U; {
			q := (R + i - 1) / i
			cost := prefix + x*i + y*q
			if cost < ans {
				ans = cost
			}
			if q == 1 {
				break
			}
			next := (R - 1) / (q - 1)
			if next >= U {
				break
			}
			i = next + 1
		}

		base += p * k
	}

	return ans
}

func main() {
	in := bufio.NewReaderSize(os.Stdin, 1<<20)
	out := bufio.NewWriterSize(os.Stdout, 1<<20)
	defer out.Flush()

	var t int
	fmt.Fscan(in, &t)
	for ; t > 0; t-- {
		var x, y, z, k int64
		fmt.Fscan(in, &x, &y, &z, &k)
		fmt.Fprintln(out, solveCase(x, y, z, k))
	}
}