#include <bits/stdc++.h>
using namespace std;
int d[55][55], n, m, g1, g2, s1, s2;
long long g[55][55], f[2][55][55];
bool check(int a1, int a2, int b1, int b2) {
  return a1 == b1 ? a2 < b2 : a1 < b1;
}
void solve(int x, int y) {
  if (!check(d[x][2], x, d[y][n], y)) return;
  memset(f, 0, sizeof(f));
  f[0][0][0] = 1;
  int now = 0;
  for (int i = 1; i <= n; i++) {
    now ^= 1;
    for (int j = 0; j < i; j++)
      for (int k = 0; j + k < i; k++) f[now][j][k] = 0;
    bool cg = false, cs = false, cc = false;
    if (i == x)
      cg = true;
    else if (i == y)
      cc = true;
    else {
      if (check(d[i][2], i, d[x][2], x)) cg = true;
      if (check(d[y][n], y, d[i][n], i)) cc = true;
      for (int j = 2; j <= n; j++) {
        if (check(d[x][2], x, d[i][j], i) && check(d[i][j], i, d[y][n], y))
          cs = true;
      }
    }
    for (int j = 0; j < i; j++)
      for (int k = 0; k + j < i; k++) {
        if (cg) f[now][j + 1][k] += f[now ^ 1][j][k];
        if (cs) f[now][j][k + 1] += f[now ^ 1][j][k];
        if (cc) f[now][j][k] += f[now ^ 1][j][k];
      }
  }
  for (int j = 0; j <= n; j++)
    for (int k = 0; j + k <= n; k++) g[j][k] += f[now][j][k];
}
int main() {
  memset(d, 63, sizeof(d));
  scanf("%d %d", &n, &m);
  for (int i = 1; i <= n; i++) d[i][i] = 0;
  for (int i = 1; i <= m; i++) {
    int x, y, c;
    scanf("%d %d %d", &x, &y, &c);
    d[x][y] = min(d[x][y], c);
    d[y][x] = min(d[y][x], c);
  }
  for (int k = 1; k <= n; k++)
    for (int i = 1; i <= n; i++)
      for (int j = 1; j <= n; j++) d[i][j] = min(d[i][j], d[i][k] + d[k][j]);
  scanf("%d %d %d %d", &g1, &g2, &s1, &s2);
  for (int i = 1; i <= n; i++) sort(d[i] + 1, d[i] + n + 1);
  d[0][n] = 1 << 28;
  for (int i = 1; i <= n; i++)
    for (int j = 0; j <= n; j++)
      if (i != j) solve(i, j);
  long long ans = 0;
  for (int i = g1; i <= g2; i++)
    for (int j = s1; j <= s2; j++) ans += g[i][j];
  printf("%I64d", ans);
}
