#include <bits/stdc++.h>
using namespace std;
int n, m, k, x, y, z;
int dp[2][2551][18 * 18 * 19 + 1];
int a[51], b[51], c[5], d[5];
int dp2[55][55][55][3];
int fac[55];
void add(int &x, int y) {
  x += y;
  if (x >= 1000000007) {
    x -= 1000000007;
  }
}
int calc(int x, int y, int z) {
  for (int i = 0; i <= x; i++) {
    for (int j = 0; j <= y; j++) {
      for (int k = 0; k <= z; k++) {
        for (int l = 0; l < 3; l++) {
          dp2[i][j][k][l] = 0;
        }
      }
    }
  }
  dp2[1][0][0][0] = dp2[0][1][0][1] = dp2[0][0][1][2] = 1;
  for (int i = 0; i <= x; i++) {
    for (int j = 0; j <= y; j++) {
      for (int k = 0; k <= z; k++) {
        add(dp2[i + 1][j][k][0], dp2[i][j][k][1]);
        add(dp2[i + 1][j][k][0], dp2[i][j][k][2]);
        add(dp2[i][j + 1][k][1], dp2[i][j][k][0]);
        add(dp2[i][j + 1][k][1], dp2[i][j][k][2]);
        add(dp2[i][j][k + 1][2], dp2[i][j][k][0]);
        add(dp2[i][j][k + 1][2], dp2[i][j][k][1]);
      }
    }
  }
  return 1LL *
         ((dp2[x][y][z][0] + dp2[x][y][z][1]) % 1000000007 + dp2[x][y][z][2]) %
         1000000007 * fac[x] % 1000000007 * fac[y] % 1000000007 * fac[z] %
         1000000007;
}
int main() {
  fac[0] = 1;
  for (int i = 1; i <= 51; i++) {
    fac[i] = 1LL * fac[i - 1] * i % 1000000007;
  }
  cin >> n >> m;
  c[0] = c[1] = c[2] = 1;
  for (int i = 0; i < n; i++) {
    cin >> a[i] >> b[i];
    b[i]--;
    c[b[i]]++;
  }
  d[0] = 1;
  d[1] = c[0];
  d[2] = c[0] * c[1];
  int cur = 0;
  dp[0][0][0] = 1;
  for (int i = 0; i < n; i++) {
    int nxt = (cur ^ 1);
    for (int j = 0; j <= m; j++) {
      for (int k = 0; k <= d[2] * c[2]; k++) {
        dp[nxt][j][k] = 0;
      }
    }
    for (int j = 0; j <= m; j++) {
      for (int k = 0; k <= d[2] * c[2]; k++) {
        add(dp[nxt][j + a[i]][k + d[b[i]]], dp[cur][j][k]);
        add(dp[nxt][j][k], dp[cur][j][k]);
      }
    }
    cur = nxt;
  }
  long long ans = 0;
  for (int i = 0; i <= 18 * 18 * 19; i++) {
    if (dp[cur][m][i]) {
      int y = i;
      int x2 = i / (c[0] * c[1]);
      y -= x2 * c[0] * c[1];
      int x1 = i / c[0] % c[1];
      y -= x1 * c[0];
      int x0 = y % c[0];
      ans = (ans + 1LL * dp[cur][m][i] * calc(x0, x1, x2)) % 1000000007;
    }
  }
  cout << ans << endl;
  return 0;
}
