← Home
 ```go
package main

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

func solve() {
	scanner := bufio.NewScanner(os.Stdin)
	scanner.Split(bufio.ScanWords)
	writer := bufio.NewWriter(os.Stdout)
	defer writer.Flush()

	var t int
	scanner.Scan()
	fmt.Sscan(scanner.Text(), &t)

	for tc := 0; tc < t; tc++ {
		var n, m int64
		var k int
		scanner.Scan()
		fmt.Sscan(scanner.Text(), &n)
		scanner.Scan()
		fmt.Sscan(scanner.Text(), &m)
		scanner.Scan()
		fmt.Sscan(scanner.Text(), &k)

		a := make([]int64, k)
		maxA := int64(0)
		for i := 0; i < k; i++ {
			scanner.Scan()
			fmt.Sscan(scanner.Text(), &a[i])
			if a[i] > maxA {
				maxA = a[i]
			}
		}

		total := n * m
		if maxA >= total {
			fmt.Fprintln(writer, "Yes")
			continue
		}

		possible := false

		cols := make([]int64, 0, k)
		for i := 0; i < k; i++ {
			if a[i] >= 2*n {
				cols = append(cols, a[i]/n)
			}
		}
		sort.Slice(cols, func(i, j int) bool { return cols[i] > cols[j] })
		var sum int64 = 0
		for i := 0; i < len(cols); i++ {
			sum += cols[i]
			t := int64(i + 1)
			if 2*t <= m && sum >= m {
				possible = true
				break
			}
			if 2*t > m {
				break
			}
		}

		if possible {
			fmt.Fprintln(writer, "Yes")
			continue
		}

		rows := make([]int64, 0, k)
		for i := 0; i < k; i++ {
			if a[i] >= 2*m {
				rows = append(rows, a[i]/m)
			}
		}
		sort.Slice(rows, func(i, j int) bool { return rows[i] > rows[j] })
		sum = 0
		for i := 0; i < len(rows); i++ {
			sum += rows[i]
			t := int64(i + 1)
			if 2*t <= n && sum >= n {
				possible = true
				break
			}
			if 2*t > n {
				break
			}
		}

		if possible {
			fmt.Fprintln(writer, "Yes")
		} else {
			fmt.Fprintln(writer, "No")
		}
	}
}

func main() {
	solve()
}
```