#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void chkmin(T &a, T b) {
  if (a > b) a = b;
}
template <class T>
inline void chkmax(T &a, T b) {
  if (a < b) a = b;
}
int N, g1, g2, s1, s2;
int dis[60][60], best[60], worst[60];
long long dp[60][60][60];
long long calc(int g, int b) {
  long long ans = 0;
  int i, j, k, cg, cs, cb;
  for (i = 0; i <= N; i++)
    for (j = 0; j <= i; j++)
      for (k = 0; k <= i - j; k++) dp[i][j][k] = 0;
  dp[0][0][0] = 1;
  for (i = 0; i < N; i++) {
    cg = cs = cb = 0;
    if (i == g)
      cg = 1;
    else if (i == b)
      cb = 1;
    else {
      if (best[i] < best[g]) cg = 1;
      if (worst[i] > worst[b]) cb = 1;
      for (j = 0; j < N; j++)
        if (i != j && dis[i][j] > best[g] && dis[i][j] < worst[b]) cs = 1;
    }
    for (j = 0; j <= i; j++)
      for (k = 0; k <= i - j; k++) {
        if (cg) dp[i + 1][j + 1][k] += dp[i][j][k];
        if (cs) dp[i + 1][j][k + 1] += dp[i][j][k];
        if (cb) dp[i + 1][j][k] += dp[i][j][k];
      }
  }
  for (i = g1; i <= g2; i++)
    for (j = s1; j <= s2; j++) ans += dp[N][i][j];
  return ans;
}
int main() {
  int i, j, k, M, u, v, d;
  long long ans;
  scanf("%d%d", &N, &M);
  for (i = 0; i < N; i++)
    for (j = 0; j < N; j++) dis[i][j] = (i == j) ? 0 : 0x3f3f3f3f;
  for (i = 0; i < M; i++) {
    scanf("%d%d%d", &u, &v, &d);
    u--, v--;
    dis[u][v] = dis[v][u] = d;
  }
  scanf("%d%d%d%d", &g1, &g2, &s1, &s2);
  for (k = 0; k < N; k++)
    for (i = 0; i < N; i++)
      for (j = 0; j < N; j++) chkmin(dis[i][j], dis[i][k] + dis[k][j]);
  for (i = 0; i < N; i++) {
    best[i] = 0x3f3f3f3f;
    worst[i] = -0x3f3f3f3f;
    for (j = 0; j < N; j++)
      if (i != j) {
        dis[i][j] = dis[i][j] * 100 + i;
        chkmin(best[i], dis[i][j]);
        chkmax(worst[i], dis[i][j]);
      }
  }
  ans = 0;
  for (i = 0; i < N; i++)
    for (j = 0; j < N; j++)
      if (i != j) ans += calc(i, j);
  printf("%I64d\n", ans);
  return 0;
}
