#include <bits/stdc++.h>
using namespace std;
const long long logN = 20;
const long long N = 100005;
const long long M = 1000000007;
const long long dx[4] = {1, 0, -1, 0};
const long long dy[4] = {0, 1, 0, -1};
vector<long long> v[5];
long long dp[15][15][15];
long long A[15][15][15][4];
long long ways(long long a, long long b, long long c, long long last) {
  long long ans = 0;
  if (A[a][b][c][last] != 0) {
    return A[a][b][c][last];
  }
  if (last == 1) {
    if (b > 0) ans += (b * ways(a, b - 1, c, 2)) % M;
    if (c > 0) ans += (c * ways(a, b, c - 1, 3)) % M;
  } else if (last == 2) {
    if (a > 0) ans += (a * ways(a - 1, b, c, 1)) % M;
    if (c > 0) ans += (c * ways(a, b, c - 1, 3)) % M;
  } else {
    if (a > 0) ans += (a * ways(a - 1, b, c, 1)) % M;
    if (b > 0) ans += (b * ways(a, b - 1, c, 2)) % M;
  }
  A[a][b][c][last] = ans;
  ans = ans % M;
  return ans;
}
long long count(long long a, long long b, long long c) {
  if (dp[a][b][c] != 0) return dp[a][b][c];
  long long cnt = 0;
  if (a > 0) cnt += a * ways(a - 1, b, c, 1);
  if (b > 0) cnt += b * ways(a, b - 1, c, 2);
  if (c > 0) cnt += c * ways(a, b, c - 1, 3);
  cnt = cnt % M;
  dp[a][b][c] = cnt;
  return cnt;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  long long n, t, x, y;
  cin >> n >> t;
  for (long long i = 0; i < n; i++) {
    cin >> x >> y;
    v[y - 1].push_back(x);
  }
  A[0][1][0][1] = 1;
  A[0][1][0][3] = 1;
  A[1][0][0][2] = 1;
  A[1][0][0][3] = 1;
  A[0][0][1][1] = 1;
  A[0][0][1][2] = 1;
  long long p = v[0].size();
  long long q = v[1].size();
  long long r = v[2].size();
  long long pp = pow(2, p);
  long long qq = pow(2, q);
  long long rr = pow(2, r);
  long long ans = 0;
  for (long long i = 0; i < pp; i++)
    for (long long j = 0; j < qq; j++)
      for (long long k = 0; k < rr; k++) {
        long long cnt = 0;
        long long a = 0, b = 0, c = 0;
        for (long long l = 0; l < p; l++) {
          if (i & (1 << l)) cnt += v[0][l], a++;
        }
        for (long long l = 0; l < q; l++) {
          if (j & (1 << l)) cnt += v[1][l], b++;
        }
        for (long long l = 0; l < r; l++) {
          if (k & (1 << l)) cnt += v[2][l], c++;
        }
        if (cnt == t) {
          if (a + b + c == 1)
            ans += 1;
          else
            ans = (ans + count(a, b, c)) % M;
        }
      }
  cout << ans % M << "\n";
  return 0;
}
