package main
import (
"bufio"
"fmt"
"os"
"sort"
)
func main() {
in := bufio.NewReader(os.Stdin)
out := bufio.NewWriter(os.Stdout)
defer out.Flush()
t := nextInt(in)
for i := 0; i < t; i++ {
n := nextInt(in)
k := nextInt(in)
a := make([]int, n)
for j := 0; j < n; j++ {
a[j] = nextInt(in)
}
b := make([]int, n)
for j := 0; j < n; j++ {
b[j] = nextInt(in)
}
candidates := make([]int, 0, 2*n)
candidates = append(candidates, a...)
candidates = append(candidates, b...)
sort.Ints(a)
sort.Ints(b)
sort.Ints(candidates)
var ans int64 = 0
for j, P := range candidates {
if j > 0 && candidates[j] == candidates[j-1] {
continue
}
idx_a := sort.Search(n, func(idx int) bool { return a[idx] >= P })
idx_b := sort.Search(n, func(idx int) bool { return b[idx] >= P })
neg := idx_a - idx_b
if neg <= k {
profit := int64(P) * int64(n-idx_b)
if profit > ans {
ans = profit
}
}
}
fmt.Fprintln(out, ans)
}
}
func nextInt(in *bufio.Reader) int {
var n int
var c byte
var err error
for {
c, err = in.ReadByte()
if err != nil || (c >= '0' && c <= '9') {
break
}
}
for err == nil && c >= '0' && c <= '9' {
n = n*10 + int(c-'0')
c, err = in.ReadByte()
}
return n
}