import os, sys, getpass, platform
import math, random, decimal, queue, heapq, bisect, itertools, functools, collections, string, operator, timeit, pprint
from queue import Queue, PriorityQueue, LifoQueue
from itertools import accumulate, chain, combinations, combinations_with_replacement, compress, count, cycle, dropwhile, filterfalse, groupby, islice, permutations, product, repeat, starmap, takewhile, tee, zip_longest
from functools import cmp_to_key, lru_cache, partial, partialmethod, reduce, singledispatch, total_ordering
from random import choice, choices, shuffle, sample, random, randint, randrange, uniform, seed, getstate, setstate, getrandbits
from string import ascii_letters, ascii_lowercase, ascii_uppercase, digits, hexdigits, octdigits, punctuation, printable, whitespace
from heapq import heapify, heappush, heappop, heapreplace, nlargest, nsmallest
from bisect import bisect, bisect_left
from collections import defaultdict, OrderedDict, deque, Counter
from math import gcd, factorial, isqrt, comb, perm, prod
cond = False
I = lambda: [int(a) for l in sys.stdin for a in l.strip().split()]
S = lambda: [a for l in sys.stdin for a in l.strip().split()]
IM = lambda: [[int(a) for a in l.split()] for l in sys.stdin]
SM = lambda: [[a for a in l.split()] for l in sys.stdin]
D = lambda k=1: {i: list(map(int, input().split())) for i in range(1, 1 + int(input()) * k)}
DS = lambda: {i: [(int(x[0]), x[1]) for _ in range(int(input()))
for x in [input().split()]] for i in range(int(input()))}
d8 = ((1, 0), (1, 1), (0, 1), (-1, 1), (-1, 0), (-1, -1), (0, -1), (1, -1))
d4 = ((1, 0), (0, 1), (-1, 0), (0, -1))
az, AZ = ascii_lowercase, ascii_uppercase
mod, inf = 1_000_000_007, float('inf')
CNR = lambda n, r: factorial(n) // (factorial(r) * factorial(n - r))
PNR = lambda n, r: factorial(n) // factorial(r)
A = IM()
if cond:
print(A)
def solution(A):
def f(arr):
n, k, p = arr
dp = [[0] * (k + 1) for _ in range(2)]
dp[0][0] = 1
prev = [[0] * (k + 1) for _ in range(2)]
for i in range(1, n + 2):
ndp = [[0] * (k + 1) for _ in range(2)]
psum = [0, 0]
for j in range(2):
for x in range(k + 1):
psum[j] += dp[j][x]
psum[j] %= p
for j in range(2):
a, b = 0, 0
for x in reversed(range(k + 1)):
ndp[j][x] += psum[j]
ndp[j][x] += b
ndp[j][x] %= p
a += prev[j ^ 1][k - x]
a %= p
b += a
b %= p
prev = dp
dp = ndp
return (dp[0][0] - dp[1][0] + p) % p
for i in range(1, len(A)):
s = A[i]
print(f(s))
solution(A)
aW1wb3J0IG9zLCBzeXMsIGdldHBhc3MsIHBsYXRmb3JtCmltcG9ydCBtYXRoLCByYW5kb20sIGRlY2ltYWwsIHF1ZXVlLCBoZWFwcSwgYmlzZWN0LCBpdGVydG9vbHMsIGZ1bmN0b29scywgY29sbGVjdGlvbnMsIHN0cmluZywgb3BlcmF0b3IsIHRpbWVpdCwgcHByaW50CmZyb20gcXVldWUgaW1wb3J0IFF1ZXVlLCBQcmlvcml0eVF1ZXVlLCBMaWZvUXVldWUKZnJvbSBpdGVydG9vbHMgaW1wb3J0IGFjY3VtdWxhdGUsIGNoYWluLCBjb21iaW5hdGlvbnMsIGNvbWJpbmF0aW9uc193aXRoX3JlcGxhY2VtZW50LCBjb21wcmVzcywgY291bnQsIGN5Y2xlLCBkcm9wd2hpbGUsIGZpbHRlcmZhbHNlLCBncm91cGJ5LCBpc2xpY2UsIHBlcm11dGF0aW9ucywgcHJvZHVjdCwgcmVwZWF0LCBzdGFybWFwLCB0YWtld2hpbGUsIHRlZSwgemlwX2xvbmdlc3QKZnJvbSBmdW5jdG9vbHMgaW1wb3J0IGNtcF90b19rZXksIGxydV9jYWNoZSwgcGFydGlhbCwgcGFydGlhbG1ldGhvZCwgcmVkdWNlLCBzaW5nbGVkaXNwYXRjaCwgdG90YWxfb3JkZXJpbmcKZnJvbSByYW5kb20gaW1wb3J0IGNob2ljZSwgY2hvaWNlcywgc2h1ZmZsZSwgc2FtcGxlLCByYW5kb20sIHJhbmRpbnQsIHJhbmRyYW5nZSwgdW5pZm9ybSwgc2VlZCwgZ2V0c3RhdGUsIHNldHN0YXRlLCBnZXRyYW5kYml0cwpmcm9tIHN0cmluZyBpbXBvcnQgYXNjaWlfbGV0dGVycywgYXNjaWlfbG93ZXJjYXNlLCBhc2NpaV91cHBlcmNhc2UsIGRpZ2l0cywgaGV4ZGlnaXRzLCBvY3RkaWdpdHMsIHB1bmN0dWF0aW9uLCBwcmludGFibGUsIHdoaXRlc3BhY2UKZnJvbSBoZWFwcSBpbXBvcnQgaGVhcGlmeSwgaGVhcHB1c2gsIGhlYXBwb3AsIGhlYXByZXBsYWNlLCBubGFyZ2VzdCwgbnNtYWxsZXN0CmZyb20gYmlzZWN0IGltcG9ydCBiaXNlY3QsIGJpc2VjdF9sZWZ0CmZyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlZmF1bHRkaWN0LCBPcmRlcmVkRGljdCwgZGVxdWUsIENvdW50ZXIKZnJvbSBtYXRoIGltcG9ydCBnY2QsIGZhY3RvcmlhbCwgaXNxcnQsIGNvbWIsIHBlcm0sIHByb2QKCmNvbmQgPSBGYWxzZQoKIApJID0gbGFtYmRhOiBbaW50KGEpIGZvciBsIGluIHN5cy5zdGRpbiBmb3IgYSBpbiBsLnN0cmlwKCkuc3BsaXQoKV0KUyA9IGxhbWJkYTogW2EgZm9yIGwgaW4gc3lzLnN0ZGluIGZvciBhIGluIGwuc3RyaXAoKS5zcGxpdCgpXQpJTSA9IGxhbWJkYTogW1tpbnQoYSkgZm9yIGEgaW4gbC5zcGxpdCgpXSBmb3IgbCBpbiBzeXMuc3RkaW5dClNNID0gbGFtYmRhOiBbW2EgZm9yIGEgaW4gbC5zcGxpdCgpXSBmb3IgbCBpbiBzeXMuc3RkaW5dCkQgPSBsYW1iZGEgaz0xOiB7aTogbGlzdChtYXAoaW50LCBpbnB1dCgpLnNwbGl0KCkpKSBmb3IgaSBpbiByYW5nZSgxLCAxICsgaW50KGlucHV0KCkpICogayl9CkRTID0gbGFtYmRhOiB7aTogWyhpbnQoeFswXSksIHhbMV0pIGZvciBfIGluIHJhbmdlKGludChpbnB1dCgpKSkKICAgICAgICAgICAgICAgICAgZm9yIHggaW4gW2lucHV0KCkuc3BsaXQoKV1dIGZvciBpIGluIHJhbmdlKGludChpbnB1dCgpKSl9CiAKZDggPSAoKDEsIDApLCAoMSwgMSksICgwLCAxKSwgKC0xLCAxKSwgKC0xLCAwKSwgKC0xLCAtMSksICgwLCAtMSksICgxLCAtMSkpCmQ0ID0gKCgxLCAwKSwgKDAsIDEpLCAoLTEsIDApLCAoMCwgLTEpKQpheiwgQVogPSBhc2NpaV9sb3dlcmNhc2UsIGFzY2lpX3VwcGVyY2FzZQptb2QsIGluZiA9IDFfMDAwXzAwMF8wMDcsIGZsb2F0KCdpbmYnKQpDTlIgPSBsYW1iZGEgbiwgcjogZmFjdG9yaWFsKG4pIC8vIChmYWN0b3JpYWwocikgKiBmYWN0b3JpYWwobiAtIHIpKQpQTlIgPSBsYW1iZGEgbiwgcjogZmFjdG9yaWFsKG4pIC8vIGZhY3RvcmlhbChyKQogCkEgPSBJTSgpCiAKaWYgY29uZDoKICAgIHByaW50KEEpCiAKIApkZWYgc29sdXRpb24oQSk6CiAgICBkZWYgZihhcnIpOgogICAgICAgIG4sIGssIHAgPSBhcnIKICAgICAgICBkcCA9IFtbMF0gKiAoayArIDEpIGZvciBfIGluIHJhbmdlKDIpXQogICAgICAgIGRwWzBdWzBdID0gMQogICAgICAgIHByZXYgPSBbWzBdICogKGsgKyAxKSBmb3IgXyBpbiByYW5nZSgyKV0KIAogICAgICAgIGZvciBpIGluIHJhbmdlKDEsIG4gKyAyKToKICAgICAgICAgICAgbmRwID0gW1swXSAqIChrICsgMSkgZm9yIF8gaW4gcmFuZ2UoMildCiAgICAgICAgICAgIHBzdW0gPSBbMCwgMF0KICAgICAgICAgICAgZm9yIGogaW4gcmFuZ2UoMik6CiAgICAgICAgICAgICAgICBmb3IgeCBpbiByYW5nZShrICsgMSk6CiAgICAgICAgICAgICAgICAgICAgcHN1bVtqXSArPSBkcFtqXVt4XQogICAgICAgICAgICAgICAgICAgIHBzdW1bal0gJT0gcAogICAgICAgICAgICBmb3IgaiBpbiByYW5nZSgyKToKICAgICAgICAgICAgICAgIGEsIGIgPSAwLCAwCiAgICAgICAgICAgICAgICBmb3IgeCBpbiByZXZlcnNlZChyYW5nZShrICsgMSkpOgogICAgICAgICAgICAgICAgICAgIG5kcFtqXVt4XSArPSBwc3VtW2pdCiAgICAgICAgICAgICAgICAgICAgbmRwW2pdW3hdICs9IGIKICAgICAgICAgICAgICAgICAgICBuZHBbal1beF0gJT0gcAogICAgICAgICAgICAgICAgICAgIGEgKz0gcHJldltqIF4gMV1bayAtIHhdCiAgICAgICAgICAgICAgICAgICAgYSAlPSBwCiAgICAgICAgICAgICAgICAgICAgYiArPSBhCiAgICAgICAgICAgICAgICAgICAgYiAlPSBwCiAgICAgICAgICAgIHByZXYgPSBkcAogICAgICAgICAgICBkcCA9IG5kcAogCiAgICAgICAgcmV0dXJuIChkcFswXVswXSAtIGRwWzFdWzBdICsgcCkgJSBwCiAKICAgIGZvciBpIGluIHJhbmdlKDEsIGxlbihBKSk6CiAgICAgICAgcyA9IEFbaV0KICAgICAgICBwcmludChmKHMpKQogCiAKc29sdXRpb24oQSk=