#include <bits/stdc++.h>
const int maxn = 0x3f3f3f3f;
const double EI =
    2.71828182845904523536028747135266249775724709369995957496696762772407663035354594571382178525166427;
const double PI = 3.141592653589793238462643383279;
using namespace std;
struct s {
  int a, b, id;
} z[210];
struct ss {
  int a;
};
vector<int> ve[3010];
long long dp[3010][210];
int main(void) {
  int n, l, i, j, k, cnt, z1, z2, si, p;
  while (~scanf("%d %d", &n, &l)) {
    cnt = 0;
    for (i = 0; i < n; i++) {
      scanf("%d %d", &z1, &z2);
      z[cnt].a = z1;
      z[cnt].b = z2;
      z[cnt].id = i;
      cnt++;
      if (z1 != z2) {
        z[cnt].a = z2;
        z[cnt].b = z1;
        z[cnt].id = i;
        cnt++;
      }
    }
    memset(dp, 0, sizeof(dp));
    for (i = 1; i <= l; i++) {
      for (j = 0; j < cnt; j++) {
        if (i - z[j].a < 0) {
          continue;
        }
        if (i - z[j].a == 0) {
          dp[i][j] = 1;
          continue;
        }
        for (k = 0; k < cnt; k++) {
          if (z[j].id != z[k].id && z[j].a == z[k].b) {
            dp[i][j] += dp[i - z[j].a][k];
            dp[i][j] %= 1000000007;
          }
        }
      }
    }
    long long ans = 0;
    for (i = 0; i < cnt; i++) {
      ans += dp[l][i];
      ans %= 1000000007;
    }
    printf("%lld\n", ans);
  }
  return 0;
}
