#include <bits/stdc++.h>
using namespace std;
const int N = 52, mod = 1e9 + 7;
int n, T, ans, f[3][N][N * N], g[3][N][N][N], s[N][N][N], fac[N];
vector<int> G[3];
void add(int& x, int y) { x = x + y >= mod ? x + y - mod : x + y; }
int main() {
  scanf("%d%d", &n, &T);
  fac[0] = 1;
  for (int i = 1; i <= n; i++) fac[i] = 1ll * fac[i - 1] * i % mod;
  s[0][0][0] = g[0][1][0][0] = g[1][0][1][0] = g[2][0][0][1] = 1;
  for (int i = 0; i < n; i++)
    for (int j = 0; i + j < n; j++)
      for (int k = 0; i + j + k < n; k++)
        for (int l = 0; l < 3; l++)
          if (g[l][i][j][k]) {
            if (l != 0) add(g[0][i + 1][j][k], g[l][i][j][k]);
            if (l != 1) add(g[1][i][j + 1][k], g[l][i][j][k]);
            if (l != 2) add(g[2][i][j][k + 1], g[l][i][j][k]);
          }
  for (int i = 0; i <= n; i++)
    for (int j = 0; i + j <= n; j++)
      for (int k = 0; i + j + k <= n; k++)
        if (i || j || k)
          s[i][j][k] = (1ll * g[0][i][j][k] + g[1][i][j][k] + g[2][i][j][k]) %
                       mod * fac[i] % mod * fac[j] % mod * fac[k] % mod;
  for (int i = 1, x, y; i <= n; i++)
    scanf("%d%d", &x, &y), G[y - 1].push_back(x);
  for (int i = 0; i < 3; i++) {
    f[i][0][0] = 1;
    for (int p = 0; p < G[i].size(); p++) {
      int t = G[i][p];
      for (int j = G[i].size() - 1; ~j; j--)
        for (int k = 0; k <= T - t; k++) add(f[i][j + 1][k + t], f[i][j][k]);
    }
  }
  for (int i = 0; i <= G[0].size(); i++)
    for (int t0 = 0; t0 <= T; t0++)
      if (f[0][i][t0])
        for (int j = 0; j <= G[1].size(); j++)
          for (int t1 = 0; t0 + t1 <= T; t1++)
            if (f[1][j][t1])
              for (int k = 0; k <= G[2].size(); k++)
                if (f[2][k][T - t0 - t1])
                  add(ans, 1ll * f[0][i][t0] * f[1][j][t1] % mod *
                               f[2][k][T - t0 - t1] % mod * s[i][j][k] % mod);
  printf("%d", ans);
}
