```go
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
reader := bufio.NewReader(os.Stdin)
writer := bufio.NewWriter(os.Stdout)
defer writer.Flush()
var t int
fmt.Fscan(reader, &t)
for i := 0; i < t; i++ {
var a, b, n, m int64
fmt.Fscan(reader, &a, &b)
fmt.Fscan(reader, &n, &m)
ans := n * b
x1 := n - n/(m+1)
cost1 := x1 * a
if cost1 < ans {
ans = cost1
}
if m*a < (m+1)*b {
k := (n - 1) / (m + 1)
rem := n - k*(m+1)
cost2 := k*m*a + rem*b
if cost2 < ans {
ans = cost2
}
}
fmt.Fprintln(writer, ans)
}
}
```