# O((s^3 + c^3) * log n * p)

MOD = 10 ** 9 + 7


def matrix_mult(A, B):
  n = len(A)
  m = len(B[0])
  p = len(B)
  assert len(A[0]) == p
  C = [[0] * m for _ in range(n)]
  for i in range(n):
    for j in range(m):
      for k in range(p):
        C[i][j] = (C[i][j] + A[i][k] * B[k][j]) % MOD
  return C


def matrix_pow(A, e):
  n = len(A)
  result = [[0] * n for _ in range(n)]
  for i in range(n):
    result[i][i] = 1
  while e:
    if e % 2 == 1:
      result = matrix_mult(result, A)
    A = matrix_mult(A, A)
    e //= 2
  return result


def solve(s, c, practices):
  S = [[1 if i == j else 0 for j in range(s + 1)] for i in range(s + 1)]
  C = [[1 if i == j else 0 for j in range(c + 1)] for i in range(c + 1)]

  for i in range(s + 1):
    if i > 0: S[i][i - 1] = i
    if i < s: S[i][i + 1] = s - i
  for i in range(c + 1):
    if i > 0: C[i][i - 1] = i
    if i < c: C[i][i + 1] = c - i

  A = [[1 if i == s and j == c else 0 for j in range(c + 1)] for i in range(s + 1)]

  prev_time = 1
  for time, room, ss, cc, bb in practices:
    St = matrix_pow(S, time - prev_time)
    Ct = matrix_pow(C, time - prev_time)
    A1 = matrix_mult(St, A)
    A = matrix_mult(A1, Ct)

    for num_A_solvers in range(s + 1):
      for num_A_coders in range(c + 1):
        num_B_solvers = s - num_A_solvers
        num_B_coders = c - num_A_coders
        num_solvers = num_A_solvers if room == 'A' else num_B_solvers
        num_coders = num_A_coders if room == 'A' else num_B_coders
        if num_solvers < ss or num_coders < cc or num_solvers + num_coders < bb:
          A[num_A_solvers][num_A_coders] = 0

    prev_time = time

  return A[s][c]


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

practices = []
for _ in range(p):
  tt, gg, ss, cc, bb = input().split()
  tt, ss, cc, bb = map(int, (tt, ss, cc, bb))
  practices.append((tt, gg, ss, cc, bb))
practices.append((n, 'A', s, c, s + c))

print(solve(s, c, practices))
