#include <bits/stdc++.h>
struct Seg {
  int a, b, id;
} seg[210];
int N, X, L, g[210][210];
long long f[210][3010];
void init() {
  int i, j, k;
  memset(g, 0, sizeof(g));
  N = 0;
  for (i = 0; i < X; i++) {
    ++N;
    scanf("%d%d", &seg[N].a, &seg[N].b);
    seg[N].id = i;
    if (seg[N].a != seg[N].b) {
      seg[N + 1].a = seg[N].b, seg[N + 1].b = seg[N].a;
      ++N;
      seg[N].id = i;
    }
  }
  for (i = 1; i <= N; i++)
    for (j = 1; j <= N; j++)
      if (i != j) {
        if (seg[j].a == seg[i].b && seg[j].id != seg[i].id) g[i][j] = 1;
      }
}
void solve() {
  int i, j, k;
  long long ans = 0;
  memset(f, 0, sizeof(f));
  for (i = 1; i <= N; i++)
    if (seg[i].a <= L) f[i][seg[i].a] = 1;
  for (k = 1; k <= L; k++)
    for (i = 1; i <= N; i++)
      if (f[i][k]) {
        for (j = 1; j <= N; j++)
          if (g[i][j] && k + seg[j].a <= L)
            f[j][k + seg[j].a] = (f[j][k + seg[j].a] + f[i][k]) % 1000000007;
      }
  for (i = 1; i <= N; i++) ans = (ans + f[i][L]) % 1000000007;
  printf("%I64d\n", ans);
}
int main() {
  while (scanf("%d%d", &X, &L) == 2) {
    init();
    solve();
  }
  return 0;
}
