import bisect
import sys
def main():
input = sys.stdin.read
data = input().split()
idx = 0
t = int(data[idx])
idx += 1
for _ in range(t):
s = data[idx]
idx += 1
m = int(data[idx])
idx += 1
l = data[idx]
idx += 1
r = data[idx]
idx += 1
# Check if any l[i] > r[i]
valid = True
for i in range(m):
if l[i] > r[i]:
valid = False
break
if not valid:
print("NO")
continue
# Precompute digit indices
digit_indices = [[] for _ in range(10)]
for i, c in enumerate(s):
d = int(c)
digit_indices[d].append(i)
pos = 0
found = False
for i in range(m):
min_d = int(l[i])
max_d = int(r[i])
allowed = list(range(min_d, max_d + 1))
current_max = -1
any_missing = False
for d in allowed:
lst = digit_indices[d]
if not lst:
any_missing = True
break
idx_bisect = bisect.bisect_left(lst, pos)
if idx_bisect == len(lst):
any_missing = True
break
next_pos = lst[idx_bisect]
if next_pos > current_max:
current_max = next_pos
if any_missing:
print("YES")
found = True
break
pos = current_max + 1
if pos > len(s) - 1 and i < m - 1:
print("YES")
found = True
break
if not found:
print("NO")
if __name__ == "__main__":
main()
aW1wb3J0IGJpc2VjdAppbXBvcnQgc3lzCgpkZWYgbWFpbigpOgogICAgaW5wdXQgPSBzeXMuc3RkaW4ucmVhZAogICAgZGF0YSA9IGlucHV0KCkuc3BsaXQoKQogICAgaWR4ID0gMAogICAgdCA9IGludChkYXRhW2lkeF0pCiAgICBpZHggKz0gMQogICAgZm9yIF8gaW4gcmFuZ2UodCk6CiAgICAgICAgcyA9IGRhdGFbaWR4XQogICAgICAgIGlkeCArPSAxCiAgICAgICAgbSA9IGludChkYXRhW2lkeF0pCiAgICAgICAgaWR4ICs9IDEKICAgICAgICBsID0gZGF0YVtpZHhdCiAgICAgICAgaWR4ICs9IDEKICAgICAgICByID0gZGF0YVtpZHhdCiAgICAgICAgaWR4ICs9IDEKICAgICAgICAKICAgICAgICAjIENoZWNrIGlmIGFueSBsW2ldID4gcltpXQogICAgICAgIHZhbGlkID0gVHJ1ZQogICAgICAgIGZvciBpIGluIHJhbmdlKG0pOgogICAgICAgICAgICBpZiBsW2ldID4gcltpXToKICAgICAgICAgICAgICAgIHZhbGlkID0gRmFsc2UKICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgaWYgbm90IHZhbGlkOgogICAgICAgICAgICBwcmludCgiTk8iKQogICAgICAgICAgICBjb250aW51ZQogICAgICAgIAogICAgICAgICMgUHJlY29tcHV0ZSBkaWdpdCBpbmRpY2VzCiAgICAgICAgZGlnaXRfaW5kaWNlcyA9IFtbXSBmb3IgXyBpbiByYW5nZSgxMCldCiAgICAgICAgZm9yIGksIGMgaW4gZW51bWVyYXRlKHMpOgogICAgICAgICAgICBkID0gaW50KGMpCiAgICAgICAgICAgIGRpZ2l0X2luZGljZXNbZF0uYXBwZW5kKGkpCiAgICAgICAgCiAgICAgICAgcG9zID0gMAogICAgICAgIGZvdW5kID0gRmFsc2UKICAgICAgICBmb3IgaSBpbiByYW5nZShtKToKICAgICAgICAgICAgbWluX2QgPSBpbnQobFtpXSkKICAgICAgICAgICAgbWF4X2QgPSBpbnQocltpXSkKICAgICAgICAgICAgYWxsb3dlZCA9IGxpc3QocmFuZ2UobWluX2QsIG1heF9kICsgMSkpCiAgICAgICAgICAgIGN1cnJlbnRfbWF4ID0gLTEKICAgICAgICAgICAgYW55X21pc3NpbmcgPSBGYWxzZQogICAgICAgICAgICAKICAgICAgICAgICAgZm9yIGQgaW4gYWxsb3dlZDoKICAgICAgICAgICAgICAgIGxzdCA9IGRpZ2l0X2luZGljZXNbZF0KICAgICAgICAgICAgICAgIGlmIG5vdCBsc3Q6CiAgICAgICAgICAgICAgICAgICAgYW55X21pc3NpbmcgPSBUcnVlCiAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgIGlkeF9iaXNlY3QgPSBiaXNlY3QuYmlzZWN0X2xlZnQobHN0LCBwb3MpCiAgICAgICAgICAgICAgICBpZiBpZHhfYmlzZWN0ID09IGxlbihsc3QpOgogICAgICAgICAgICAgICAgICAgIGFueV9taXNzaW5nID0gVHJ1ZQogICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICBuZXh0X3BvcyA9IGxzdFtpZHhfYmlzZWN0XQogICAgICAgICAgICAgICAgaWYgbmV4dF9wb3MgPiBjdXJyZW50X21heDoKICAgICAgICAgICAgICAgICAgICBjdXJyZW50X21heCA9IG5leHRfcG9zCiAgICAgICAgICAgIAogICAgICAgICAgICBpZiBhbnlfbWlzc2luZzoKICAgICAgICAgICAgICAgIHByaW50KCJZRVMiKQogICAgICAgICAgICAgICAgZm91bmQgPSBUcnVlCiAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAKICAgICAgICAgICAgcG9zID0gY3VycmVudF9tYXggKyAxCiAgICAgICAgICAgIGlmIHBvcyA+IGxlbihzKSAtIDEgYW5kIGkgPCBtIC0gMToKICAgICAgICAgICAgICAgIHByaW50KCJZRVMiKQogICAgICAgICAgICAgICAgZm91bmQgPSBUcnVlCiAgICAgICAgICAgICAgICBicmVhawogICAgICAgIAogICAgICAgIGlmIG5vdCBmb3VuZDoKICAgICAgICAgICAgcHJpbnQoIk5PIikKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBtYWluKCk=