#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef vector<ll> vec;
const ll MOD = 1000000007;
const int N = 2000005;
ll fact[N];
ll invFact[N];
ll power(ll a, ll b)
{
ll res = 1;
while (b)
{
if (b & 1)
res = (res * a) % MOD;
a = (a * a) % MOD;
b >>= 1;
}
return res;
}
void precompute()
{
fact[0] = 1;
for (int i = 1; i < N; i++)
fact[i] = (fact[i - 1] * i) % MOD;
invFact[N - 1] = power(fact[N - 1], MOD - 2);
for (int i = N - 2; i >= 0; i--)
invFact[i] = (invFact[i + 1] * (i + 1)) % MOD;
}
ll nCr(ll n, ll r)
{
if (r > n || r < 0)
return 0;
return (((fact[n] * invFact[r]) % MOD) * invFact[n - r]) % MOD;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
precompute();
ll t;
cin >> t;
while (t--)
{
ll n, k;
cin >> n >> k;
string s;
cin >> s;
vector<char> v(n + 1);
for (int i = 1; i <= n; i++)
v[i] = s[i - 1];
vec l(k+1), r(k+1);
for(int i=1;i<=k;i++) cin>>l[i];
for(int i=1;i<=k;i++) cin>>r[i];
ll q;
cin >> q;
vec x(q + 1);
for (int i = 1; i <= q; i++)
cin >> x[i];
// for(int i=1;i<=n;i++) cout<<v[i];
// cout<<endl;
// for(int i=1;i<=k;i++) cout<<l[i]<<" ";
// cout<<endl;
// for(int i=1;i<=k;i++) cout<<r[i]<<" ";
// cout<<endl;
vec pre(n + 2, 0);
for (auto val : x)
{
ll idx = lower_bound(r.begin(), r.end(), val) - r.begin();
ll fi = min(l[idx] + r[idx] - val, val);
ll se = max(l[idx] + r[idx] - val, val);
pre[fi]++;
pre[se + 1]--;
}
for (int i = 1; i < pre.size(); i++)
pre[i] += pre[i - 1];
ll i=1;
while(i<=k)
{
// cout<<i<<endl;
ll first = l[i];
ll last = r[i];
for (int j = first; j<=(first+(last-first)/2); j++)
{
if ((pre[j] % 2) == 0)
continue;
else
{
ll diff = j - first;
swap(v[j], v[last - diff]);
}
}
i++;
}
for (int i = 1; i <= n; i++)
cout << v[i];
cout << endl;
}
}