← Home
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
}