#include <bits/stdc++.h>
using namespace std;
using ii = long long;
const int N = 51;
ii amt[N][N][N], damt[N][N][N][3], ad[55][2555][2], bd[55][55][2555];
int main() {
  const ii mod = 1e9 + 7;
  damt[0][0][0][0] = damt[0][0][0][1] = damt[0][0][0][2] = 1;
  for (int i = 0; i < N - 1; ++i) {
    for (int j = 0; j < N - 1; ++j) {
      for (int h = 0; h < N - 1; ++h) {
        damt[i + 1][j][h][0] = damt[i][j][h][1] + damt[i][j][h][2];
        damt[i][j + 1][h][1] = damt[i][j][h][0] + damt[i][j][h][2];
        damt[i][j][h + 1][2] = damt[i][j][h][0] + damt[i][j][h][1];
        damt[i + 1][j][h][0] %= mod;
        damt[i][j + 1][h][1] %= mod;
        damt[i][j][h + 1][2] %= mod;
        for (int x = 0; x < 3; ++x) {
          amt[i][j][h] += damt[i][j][h][x];
          amt[i][j][h] %= mod;
        }
      }
    }
  }
  array<ii, N> fact;
  fact[0] = 1;
  for (int i = 1; i <= N - 1; ++i) fact[i] = fact[i - 1] * i % mod;
  int n, t;
  cin >> n >> t;
  vector<int> d(n), b(n);
  ad[0][0][0]++;
  ad[0][0][1]++;
  for (int i = 0; i < n; ++i) {
    cin >> d[i] >> b[i];
    --b[i];
    if (b[i] < 2) {
      for (int j = n - 1; j >= 0; --j) {
        for (int x = t - d[i]; x >= 0; --x) {
          ad[j + 1][x + d[i]][b[i]] += ad[j][x][b[i]];
          ad[j + 1][x + d[i]][b[i]] %= mod;
        }
      }
    }
  }
  for (int i = 0; i <= n; ++i) {
    for (int j = 0; j <= t; ++j) {
      bd[i][0][j] = ad[i][j][0];
    }
  }
  for (int i = 0; i < n; ++i) {
    if (b[i] == 2) {
      for (int x = t - d[i]; x >= 0; --x) {
        for (int h = n - 1; h >= 0; --h) {
          for (int j = n - 1; j >= 0; --j) {
            bd[h][j + 1][x + d[i]] += bd[h][j][x];
            bd[h][j + 1][x + d[i]] %= mod;
          }
        }
      }
    }
  }
  ii r = 0;
  for (int z = 0; z <= t; ++z) {
    int c = t - z;
    for (int i = 0; i <= n; ++i) {
      for (int j = 0; j <= n; ++j) {
        for (int h = 0; h <= n; ++h) {
          ii o = bd[i][j][c] * ad[h][z][1];
          if (!o) continue;
          o %= mod;
          array<ii, 3> g;
          g[0] = i;
          g[1] = j;
          g[2] = h;
          ii rt = amt[g[0]][g[1]][g[2]];
          rt *= fact[g[0]] * fact[g[1]] % mod * fact[g[2]] % mod;
          rt %= mod;
          rt *= o;
          r = (r + rt % mod) % mod;
        }
      }
    }
  }
  cout << (r * 500000004ll) % mod << "\n";
}
