#include <bits/stdc++.h>
using namespace std;
const long long N = 2e3 + 10, mod = 1e9 + 7, inf = 0x3f3f3f3f3f3f3f3f;
int a[N], b[N], cnt[4];
long long dp[51][51][51][4];
int main() {
  dp[0][0][0][1] = 1;
  dp[0][0][0][2] = 1;
  dp[0][0][0][3] = 1;
  for (int i = 0; i <= 50; i++) {
    for (int j = 0; j <= 50; j++) {
      for (int l = 0; l <= 50; l++) {
        if (i + j + l == 0) continue;
        for (int k = 1; k <= 3; k++) {
          if (k == 1 && j)
            dp[i][j][l][k] =
                (dp[i][j][l][k] + dp[i][j - 1][l][2] * j % mod) % mod;
          if (k == 1 && l)
            dp[i][j][l][k] =
                (dp[i][j][l][k] + dp[i][j][l - 1][3] * l % mod) % mod;
          if (k == 2 && i)
            dp[i][j][l][k] =
                (dp[i][j][l][k] + dp[i - 1][j][l][1] * i % mod) % mod;
          if (k == 2 && l)
            dp[i][j][l][k] =
                (dp[i][j][l][k] + dp[i][j][l - 1][3] * l % mod) % mod;
          if (k == 3 && j)
            dp[i][j][l][k] =
                (dp[i][j][l][k] + dp[i][j - 1][l][2] * j % mod) % mod;
          if (k == 3 && i)
            dp[i][j][l][k] =
                (dp[i][j][l][k] + dp[i - 1][j][l][1] * i % mod) % mod;
        }
      }
    }
  }
  int n, t;
  long long ans = 0;
  scanf("%d %d", &n, &t);
  for (int i = 0; i < n; i++) {
    scanf("%d %d", &a[i], &b[i]);
    cnt[b[i]]++;
  }
  int d[cnt[1] + 2][cnt[2] + 2][cnt[3] + 2][t + 51];
  memset(d, 0, sizeof d);
  d[0][0][0][0] = 1;
  for (int i = 0; i < n; i++) {
    for (int j = cnt[1]; j >= 0; j--)
      for (int k = cnt[2]; k >= 0; k--)
        for (int l = cnt[3]; l >= 0; l--)
          for (int T = t - a[i]; T >= 0; T--)
            if (b[i] == 1)
              d[j + 1][k][l][T + a[i]] =
                  (d[j + 1][k][l][T + a[i]] + d[j][k][l][T]) % mod;
            else if (b[i] == 2)
              d[j][k + 1][l][T + a[i]] =
                  (d[j][k + 1][l][T + a[i]] + d[j][k][l][T]) % mod;
            else if (b[i] == 3)
              d[j][k][l + 1][T + a[i]] =
                  (d[j][k][l + 1][T + a[i]] + d[j][k][l][T]) % mod;
  }
  for (int i = 0; i <= cnt[1]; i++) {
    for (int j = 0; j <= cnt[2]; j++) {
      for (int l = 0; l <= cnt[3]; l++) {
        if (i + j + l == 0) continue;
        if (i)
          ans =
              (ans + d[i][j][l][t] * dp[i - 1][j][l][1] % mod * i % mod) % mod;
        if (j)
          ans =
              (ans + d[i][j][l][t] * dp[i][j - 1][l][2] % mod * j % mod) % mod;
        if (l)
          ans =
              (ans + d[i][j][l][t] * dp[i][j][l - 1][3] % mod * l % mod) % mod;
      }
    }
  }
  printf("%lld\n", ans);
}
