#include <bits/stdc++.h>
using namespace std;
int N, Len, a[105][2];
long long dp[105][2][3005];
int main() {
  cin >> N >> Len;
  for (int i = 0; i < N; i++) {
    cin >> a[i][0] >> a[i][1];
  }
  for (int i = 0; i < N; i++)
    if (a[i][0] != a[i][1]) {
      dp[i][0][a[i][0]] = 1;
      dp[i][1][a[i][1]] = 1;
    } else {
      dp[i][0][a[i][0]] = 1;
    }
  for (int l = 1; l < Len; l++) {
    for (int i = 0; i < N; i++) {
      for (int j = 0; j < N; j++) {
        if (i == j) continue;
        if (l + a[j][0] <= Len && a[i][1] == a[j][0])
          dp[j][0][l + a[j][0]] =
              (dp[j][0][l + a[j][0]] + dp[i][0][l] + 0LL) % 1000000007;
        if (l + a[j][0] <= Len && a[i][0] == a[j][0])
          dp[j][0][l + a[j][0]] =
              (dp[j][0][l + a[j][0]] + dp[i][1][l] + 0LL) % 1000000007;
        if (a[j][0] == a[j][1]) continue;
        if (l + a[j][1] <= Len && a[i][1] == a[j][1])
          dp[j][1][l + a[j][1]] =
              (dp[j][1][l + a[j][1]] + dp[i][0][l] + 0LL) % 1000000007;
        if (l + a[j][1] <= Len && a[i][0] == a[j][1])
          dp[j][1][l + a[j][1]] =
              (dp[j][1][l + a[j][1]] + dp[i][1][l] + 0LL) % 1000000007;
      }
    }
  }
  long long ans = 0;
  for (int i = 0; i < N; i++)
    ans = (ans + dp[i][0][Len] + dp[i][1][Len] + 0LL) % 1000000007;
  cout << ans << endl;
  return 0;
}
