MOD = 998244353
def solve(N, M, S, R, Q, X, Y):
from collections import Counter, defaultdict
def modinv(a): return pow(a, MOD - 2, MOD)
fact = [1] * (N + 1)
invfact = [1] * (N + 1)
for i in range(1, N + 1):
fact[i] = fact[i - 1] * i % MOD
invfact[N] = modinv(fact[N])
for i in range(N - 1, -1, -1):
invfact[i] = invfact[i + 1] * (i + 1) % MOD
def nCr(n, r):
if n < r or r < 0: return 0
return fact[n] * invfact[r] % MOD * invfact[n - r] % MOD
chars = set(R)
prefix = defaultdict(list)
count = {ch: 0 for ch in chars}
for i in range(N + 1):
for ch in chars:
prefix[ch].append(count[ch])
if i < N and S[i] in chars:
count[S[i]] += 1
freqR = Counter(R)
ans = []
for i in range(Q):
l, rpos = X[i] - 1, Y[i]
total = 1
for ch in freqR:
n = prefix[ch][rpos] - prefix[ch][l]
total = total * nCr(n, freqR[ch]) % MOD
ans.append(total)
return ans
T = int(input())
for _ in range(T):
N, M = map(int, input().split())
S = input().strip()
R = input().strip()
Q = int(input())
X = list(map(int, input().split()))
Y = list(map(int, input().split()))
out_ = solve(N, M, S, R, Q, X, Y)
print(" ".join(map(str, out_)))
TU9EID0gOTk4MjQ0MzUzCgpkZWYgc29sdmUoTiwgTSwgUywgUiwgUSwgWCwgWSk6CiAgICBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBDb3VudGVyLCBkZWZhdWx0ZGljdAogICAgZGVmIG1vZGludihhKTogcmV0dXJuIHBvdyhhLCBNT0QgLSAyLCBNT0QpCiAgICBmYWN0ID0gWzFdICogKE4gKyAxKQogICAgaW52ZmFjdCA9IFsxXSAqIChOICsgMSkKICAgIGZvciBpIGluIHJhbmdlKDEsIE4gKyAxKToKICAgICAgICBmYWN0W2ldID0gZmFjdFtpIC0gMV0gKiBpICUgTU9ECiAgICBpbnZmYWN0W05dID0gbW9kaW52KGZhY3RbTl0pCiAgICBmb3IgaSBpbiByYW5nZShOIC0gMSwgLTEsIC0xKToKICAgICAgICBpbnZmYWN0W2ldID0gaW52ZmFjdFtpICsgMV0gKiAoaSArIDEpICUgTU9ECgogICAgZGVmIG5DcihuLCByKToKICAgICAgICBpZiBuIDwgciBvciByIDwgMDogcmV0dXJuIDAKICAgICAgICByZXR1cm4gZmFjdFtuXSAqIGludmZhY3Rbcl0gJSBNT0QgKiBpbnZmYWN0W24gLSByXSAlIE1PRAoKICAgIGNoYXJzID0gc2V0KFIpCiAgICBwcmVmaXggPSBkZWZhdWx0ZGljdChsaXN0KQogICAgY291bnQgPSB7Y2g6IDAgZm9yIGNoIGluIGNoYXJzfQogICAgZm9yIGkgaW4gcmFuZ2UoTiArIDEpOgogICAgICAgIGZvciBjaCBpbiBjaGFyczoKICAgICAgICAgICAgcHJlZml4W2NoXS5hcHBlbmQoY291bnRbY2hdKQogICAgICAgIGlmIGkgPCBOIGFuZCBTW2ldIGluIGNoYXJzOgogICAgICAgICAgICBjb3VudFtTW2ldXSArPSAxCgogICAgZnJlcVIgPSBDb3VudGVyKFIpCiAgICBhbnMgPSBbXQogICAgZm9yIGkgaW4gcmFuZ2UoUSk6CiAgICAgICAgbCwgcnBvcyA9IFhbaV0gLSAxLCBZW2ldCiAgICAgICAgdG90YWwgPSAxCiAgICAgICAgZm9yIGNoIGluIGZyZXFSOgogICAgICAgICAgICBuID0gcHJlZml4W2NoXVtycG9zXSAtIHByZWZpeFtjaF1bbF0KICAgICAgICAgICAgdG90YWwgPSB0b3RhbCAqIG5DcihuLCBmcmVxUltjaF0pICUgTU9ECiAgICAgICAgYW5zLmFwcGVuZCh0b3RhbCkKICAgIHJldHVybiBhbnMKClQgPSBpbnQoaW5wdXQoKSkKZm9yIF8gaW4gcmFuZ2UoVCk6CiAgICBOLCBNID0gbWFwKGludCwgaW5wdXQoKS5zcGxpdCgpKQogICAgUyA9IGlucHV0KCkuc3RyaXAoKQogICAgUiA9IGlucHV0KCkuc3RyaXAoKQogICAgUSA9IGludChpbnB1dCgpKQogICAgWCA9IGxpc3QobWFwKGludCwgaW5wdXQoKS5zcGxpdCgpKSkKICAgIFkgPSBsaXN0KG1hcChpbnQsIGlucHV0KCkuc3BsaXQoKSkpCiAgICBvdXRfID0gc29sdmUoTiwgTSwgUywgUiwgUSwgWCwgWSkKICAgIHByaW50KCIgIi5qb2luKG1hcChzdHIsIG91dF8pKSkK