package main
import (
"bytes"
"io"
"os"
)
var data []byte
var ptr int
func nextInt() int {
for ptr < len(data) && data[ptr] <= ' ' {
ptr++
}
sign := 1
if data[ptr] == '-' {
sign = -1
ptr++
}
val := 0
for ptr < len(data) && data[ptr] > ' ' {
val = val*10 + int(data[ptr]-'0')
ptr++
}
return val * sign
}
func nextString() string {
for ptr < len(data) && data[ptr] <= ' ' {
ptr++
}
start := ptr
for ptr < len(data) && data[ptr] > ' ' {
ptr++
}
return string(data[start:ptr])
}
func main() {
data, _ = io.ReadAll(os.Stdin)
t := nextInt()
var out bytes.Buffer
for ; t > 0; t-- {
n := nextInt()
k := nextInt()
s := []byte(nextString())
l := make([]int, k)
r := make([]int, k)
for i := 0; i < k; i++ {
l[i] = nextInt()
}
for i := 0; i < k; i++ {
r[i] = nextInt()
}
seg := make([]int, n+1)
for i := 0; i < k; i++ {
for p := l[i]; p <= r[i]; p++ {
seg[p] = i
}
}
diff := make([]byte, n+3)
q := nextInt()
for i := 0; i < q; i++ {
x := nextInt()
id := seg[x]
L, R := l[id], r[id]
y := L + R - x
a := x
if y < a {
a = y
}
mid := (L + R) / 2
diff[a] ^= 1
diff[mid+1] ^= 1
}
for i := 0; i < k; i++ {
L, R := l[i], r[i]
mid := (L + R) / 2
var cur byte
for p := L; p <= mid; p++ {
cur ^= diff[p]
qp := L + R - p
if cur == 1 && p < qp {
s[p-1], s[qp-1] = s[qp-1], s[p-1]
}
}
}
out.Write(s)
out.WriteByte('\n')
}
os.Stdout.Write(out.Bytes())
}