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