```go
package main
import (
"bufio"
"os"
)
func readInt(r *bufio.Reader) int {
c, err := r.ReadByte()
for err == nil && c <= ' ' {
c, err = r.ReadByte()
}
if err != nil {
return 0
}
nVal := 0
for err == nil && c > ' ' {
nVal = nVal*10 + int(c-'0')
c, err = r.ReadByte()
}
return nVal
}
func readStringAsInt(r *bufio.Reader, nLen int) int {
c, err := r.ReadByte()
for err == nil && c <= ' ' {
c, err = r.ReadByte()
}
if err != nil {
return 0
}
nVal := 0
for i := 0; i < nLen; i++ {
nVal = nVal<<1 | int(c-'0')
c, err = r.ReadByte()
}
return nVal
}
func writeInt(w *bufio.Writer, n int) {
if n == 0 {
w.WriteByte('0')
w.WriteByte('\n')
return
}
var buf [20]byte
i := 19
for n > 0 {
buf[i] = byte(n%10 + '0')
n /= 10
i--
}
w.Write(buf[i+1:])
w.WriteByte('\n')
}
func main() {
r := bufio.NewReaderSize(os.Stdin, 1<<20)
w := bufio.NewWriterSize(os.Stdout, 1<<20)
defer w.Flush()
n := readInt(r)
m := readInt(r)
q := readInt(r)
if n == 0 {
return
}
weights := make([]int, n)
for i := 0; i < n; i++ {
weights[i] = readInt(r)
}
count := make([]int, 1<<n)
for i := 0; i < m; i++ {
val := readStringAsInt(r, n)
count[val]++
}
wuMask := make([]int, 1<<n)
for mask := 0; mask < (1 << n); mask++ {
sum := 0
for i := 0; i < n; i++ {
if (mask & (1 << (n - 1 - i))) == 0 {
sum += weights[i]
}
}
wuMask[mask] = sum
}
maxVal := 1 << n
ans := make([][101]int, maxVal)
for t := 0; t < maxVal; t++ {
for x := 0; x < maxVal; x++ {
cost := wuMask[t^x]
if cost <= 100 {
ans[t][cost] += count[x]
}
}
for c := 1; c <= 100; c++ {
ans[t][c] += ans[t][c-1]
}
}
for i := 0; i < q; i++ {
t := readStringAsInt(r, n)
k := readInt(r)
if k > 100 {
k = 100
}
writeInt(w, ans[t][k])
}
}
```