n,p,s,c = map(int, input().split())

left_trans = [[0]*(s+1) for _ in range(s+1)]
for i in range(s+1):
    if i>0: left_trans[i-1][i] = i
    left_trans[i][i] = 1
    if i+1 <= s: left_trans[i+1][i] = s-i

right_trans = [[0]*(c+1) for _ in range(c+1)]
for j in range(c+1):
    if j>0: right_trans[j-1][j] = j
    right_trans[j][j] = 1
    if j+1 <= c: right_trans[j+1][j] = c-j

state = [[0]*(c+1) for _ in range(s+1)]

state[0][0] = 1

MOD = 10**9+7

def matmul(a, b):
    r = len(a)
    p = len(b)
    c = len(b[0])
    ans = [[0]*c for _ in range(r)]

    for i in range(r):
        for k in range(p):
            for j in range(c):
                ans[i][j] = (ans[i][j] + a[i][k] * b[k][j]) % MOD

    return ans

def matexp(a, pow):
    n = len(a)
    ans = [[0]*n for _ in range(n)]
    for i in range(n): ans[i][i] = 1

    while pow:
        if pow&1: ans = matmul(ans, a)
        a = matmul(a, a)
        pow >>= 1

    return ans

curtime = 0

probs = []
for _ in range(p):
    time, side, sl, cl, tl = input().split()
    time, sl, cl, tl = map(int, [time, sl, cl, tl])
    probs += [(time-1, side, sl, cl, tl)]
probs += [(n-1, 'A', s, c, s+c)]

for time, side, sl, cl, tl in probs:
    state = matmul(matexp(left_trans, time - curtime), state)
    state = matmul(state, matexp(right_trans, time-curtime))
    curtime = time

    if side == 'B':
        for i in range(s+1):
            for j in range(c+1):
                if i<sl or j<cl or i+j<tl: state[i][j] = 0
    else:
        for i in range(s+1):
            for j in range(c+1):
                if s-i<sl or c-j<cl or s-i+c-j<tl: state[i][j] = 0

print(state[0][0])