#include <bits/stdc++.h>
using namespace std;
int n, m, a[110][110], Min[110], Max[110], s1, s2, ss1, ss2;
long long f[55][55][55], t[55][55][55], t_cnt, ans;
bool can1[55], can2[55], can3[55];
void work() {
  memset(Min, 127, sizeof(Min));
  memset(Max, -1, sizeof(Max));
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++)
      if (i == j)
        continue;
      else
        Min[i] = min(a[i][j], Min[i]), Max[i] = max(a[i][j], Max[i]);
  for (int Au = 1; Au <= n; Au++)
    for (int Cu = 1; Cu <= n; Cu++) {
      if (Au == Cu) continue;
      if (Min[Au] > Max[Cu] || (Min[Au] == Max[Cu] && Au > Cu)) continue;
      f[0][0][0] = 1;
      t_cnt++;
      t[0][0][0] = t_cnt;
      memset(can1, 0, sizeof(can1));
      memset(can2, 0, sizeof(can2));
      memset(can3, 0, sizeof(can3));
      int lim1 = Min[Au], lim2 = Max[Cu];
      for (int i = 1; i <= n; i++)
        for (int j = 1; j <= n; j++) {
          if (i == j) continue;
          if (a[i][j] < lim1 || (a[i][j] == lim1 && i < Au))
            can1[i] = 1;
          else if (a[i][j] > lim2 || (a[i][j] == lim2 && i > Cu))
            can3[i] = 1;
          else
            can2[i] = 1;
        }
      for (int i = 0; i < n; i++)
        for (int j = 0; j <= i; j++)
          for (int k = 0; k <= i - j; k++) {
            if (t[i][j][k] != t_cnt) continue;
            long long v = f[i][j][k];
            if (i + 1 == Au || i + 1 == Cu) {
              if (t[i + 1][j + (i + 1 == Au)][k] != t_cnt)
                t[i + 1][j + (i + 1 == Au)][k] = t_cnt,
                                       f[i + 1][j + (i + 1 == Au)][k] = 0;
              f[i + 1][j + (i + 1 == Au)][k] += v;
              continue;
            }
            if (can1[i + 1]) {
              if (t[i + 1][j + 1][k] != t_cnt)
                t[i + 1][j + 1][k] = t_cnt, f[i + 1][j + 1][k] = 0;
              f[i + 1][j + 1][k] += v;
            }
            if (can2[i + 1]) {
              if (t[i + 1][j][k + 1] != t_cnt)
                t[i + 1][j][k + 1] = t_cnt, f[i + 1][j][k + 1] = 0;
              f[i + 1][j][k + 1] += v;
            }
            if (can3[i + 1]) {
              if (t[i + 1][j][k] != t_cnt)
                t[i + 1][j][k] = t_cnt, f[i + 1][j][k] = 0;
              f[i + 1][j][k] += v;
            }
          }
      for (int i = s1; i <= s2; i++)
        for (int j = ss1; j <= ss2; j++)
          if (t[n][i][j] == t_cnt) ans += f[n][i][j];
    }
  cout << ans;
}
int main() {
  cin >> n >> m;
  int x, y, z;
  memset(a, 127 / 3, sizeof(a));
  for (int i = 1; i <= n; i++) a[i][i] = 0;
  for (int i = 1; i <= m; i++) {
    scanf("%d %d %d", &x, &y, &z);
    a[x][y] = a[y][x] = min(a[x][y], z);
  }
  cin >> s1 >> s2 >> ss1 >> ss2;
  for (int k = 1; k <= n; k++)
    for (int i = 1; i <= n; i++)
      for (int j = 1; j <= n; j++) a[i][j] = min(a[i][k] + a[k][j], a[i][j]);
  work();
}
