#include <bits/stdc++.h>
using namespace std;
const long long mod = 1e9 + 7;
long long dp[4][21][355];
long long dp0[21][21][21][21];
long long dfs(long long x, long long y, long long z, int pre) {
  if (pre != -1 && dp0[x][y][z][pre] != -1) return dp0[x][y][z][pre];
  if (x == 0 && y == 0 && z == 0) {
    return 1;
  }
  long long ac = 0;
  for (int i = 1; i <= 3; i++) {
    if (pre == i) continue;
    if (x - (i == 1) >= 0 && y - (i == 2) >= 0 && z - (i == 3) >= 0)
      ac += dfs(x - (i == 1), y - (i == 2), z - (i == 3), i);
    ac %= mod;
  }
  if (pre != -1) dp0[x][y][z][pre] = ac;
  return ac;
}
long long A(int x, int y) {
  long long ac = 1;
  for (int i = x; i >= x - y + 1; i--) {
    ac *= i;
    ac %= mod;
  }
  return ac;
}
int main() {
  int n, t;
  vector<int> g[5];
  scanf("%d%d", &n, &t);
  for (int i = 1; i <= n; i++) {
    int a, b;
    scanf("%d%d", &a, &b);
    g[b].push_back(a);
  }
  memset(dp0, -1, sizeof(dp0));
  memset(dp, 0, sizeof(dp));
  dp[1][0][0] = dp[2][0][0] = dp[3][0][0] = 1;
  for (int i = 0; i < g[1].size(); i++) {
    int v = g[1][i];
    for (int j = i + 1; j >= 1; j--) {
      for (int k = t; k >= v; k--) {
        dp[1][j][k] = (dp[1][j][k] + dp[1][j - 1][k - v]) % mod;
      }
    }
  }
  for (int i = 0; i < g[2].size(); i++) {
    int v = g[2][i];
    for (int j = i + 1; j >= 1; j--) {
      for (int k = t; k >= v; k--) {
        dp[2][j][k] = (dp[2][j][k] + dp[2][j - 1][k - v]) % mod;
      }
    }
  }
  for (int i = 0; i < g[3].size(); i++) {
    int v = g[3][i];
    for (int j = i + 1; j >= 1; j--) {
      for (int k = t; k >= v; k--) {
        dp[3][j][k] = (dp[3][j][k] + dp[3][j - 1][k - v]) % mod;
      }
    }
  }
  long long ac = 0;
  for (int i = 0; i <= g[1].size(); i++) {
    for (int j = 0; j <= g[2].size(); j++) {
      for (int k = 0; k <= g[3].size(); k++) {
        for (int z = 0; z <= t; z++) {
          for (int w = 0; w + z <= t; w++) {
            ac += (dp[1][i][z] * dp[2][j][w] % mod * dp[3][k][t - z - w]) %
                  mod * (A(i, i) % mod * A(j, j) % mod * A(k, k)) % mod *
                  dfs(i, j, k, -1) % mod;
            ac %= mod;
          }
        }
      }
    }
  }
  printf("%lld\n", ac);
  return 0;
}
