#include <iostream>
#include <cstdio>
#include <queue>
#include <cstring>
const int N = 3e3 + 7;
const int M = 3e3 + 7;
const int inf = 0x7fffffff;
int head[N], nex[M], to[M];
int cnt;
void add(int u, int v) {
cnt++;
nex[cnt] = head[u];
to[cnt] = v;
head[u] = cnt;
}
std::queue <int> q;
int dis[3][N];
void bfs(int rt, int tp) {
dis[tp][rt] = 0;
while(!q.empty()) q.pop();
q.push(rt);
while(!q.empty()) {
int u = q.front();
q.pop();
for(int i = head[u]; i; i = nex[i]) {
int v = to[i];
if(dis[tp][v] > dis[tp][u] + 1)
dis[tp][v] = dis[tp][u] + 1, q.push(v);
}
}
return;
}
int main() {
std::freopen("test.in", "r", stdin);
int n, m;
std::cin >> n >> m;
for(int i = 1; i <= m; i++) {
int x, y;
std::cin >> x >> y;
add(x, y);
add(y, x);
}
int s1, t1, s2, t2;
std::cin >> s1 >> t1 >> s2 >> t2;
std::cout << nex[2736];
//for(int i = head[1]; i; i = nex[i]) std::cout << i << ' ';
std::memset(dis, 0x3f, sizeof dis);
bfs(1, 0);
bfs(s1, 1);
bfs(s2, 2);
int ans = inf;
for(int i = 1; i <= n; i++) {
//if(i == 1 || i == s1 || i == s2) continue;
int l1 = dis[0][i], l2 = dis[1][i], l3 = dis[2][i];
if(l1 + l2 <= t1 && l1 + l3 <= t2 && l1 + l2 + l3 <= ans) ans = l1 + l2 + l3;
}
std::cout << (ans == inf ? -1 : m - ans) << '\n';
return 0;
}
最后几个测试点遍历与1相邻的点时死循环了