← Home
package main

import (
	"fmt"
	"io"
	"os"
	"strings"
)

func main() {
	buf, _ := io.ReadAll(os.Stdin)
	var pos int
	nextInt := func() int64 {
		for pos < len(buf) && buf[pos] <= ' ' {
			pos++
		}
		if pos >= len(buf) {
			return 0
		}
		sign := int64(1)
		if buf[pos] == '-' {
			sign = -1
			pos++
		}
		res := int64(0)
		for pos < len(buf) && buf[pos] > ' ' {
			res = res*10 + int64(buf[pos]-'0')
			pos++
		}
		return res * sign
	}

	n := int(nextInt())
	if n == 0 {
		return
	}
	m := int(nextInt())
	q := int(nextInt())

	a := make([]int64, n)
	var sa int64
	for i := 0; i < n; i++ {
		a[i] = nextInt()
		sa += a[i]
	}

	b := make([]int64, m)
	var sb int64
	for i := 0; i < m; i++ {
		b[i] = nextInt()
		sb += b[i]
	}

	hasA := make([]bool, 400005)
	hasB := make([]bool, 400005)

	for i := 0; i < n; i++ {
		val := sa - a[i]
		if val >= -200000 && val <= 200000 {
			hasA[val+200000] = true
		}
	}

	for i := 0; i < m; i++ {
		val := sb - b[i]
		if val >= -200000 && val <= 200000 {
			hasB[val+200000] = true
		}
	}

	check := func(v1, v2 int64) bool {
		if v1 >= -200000 && v1 <= 200000 && v2 >= -200000 && v2 <= 200000 {
			return hasA[v1+200000] && hasB[v2+200000]
		}
		return false
	}

	var out strings.Builder
	for i := 0; i < q; i++ {
		x := nextInt()
		absX := x
		if absX < 0 {
			absX = -absX
		}

		found := false
		for d := int64(1); d*d <= absX; d++ {
			if absX%d == 0 {
				p1 := d
				p2 := x / d

				if check(p1, p2) || check(p2, p1) || check(-p1, -p2) || check(-p2, -p1) {
					found = true
					break
				}
			}
		}

		if found {
			out.WriteString("YES\n")
		} else {
			out.WriteString("NO\n")
		}
	}
	fmt.Print(out.String())
}