#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pb(x,y) e[x].push_back(y)
ll n,m,u,v,s1,t1,s2,t2,ans,bo[4000];
ll f[10][4000];
vector<ll>e[4000];
queue<ll>q;
void dj(){
f[1][1]=0;
q.push(1);
while(!q.empty()){
ll u=q.front();
q.pop();
if(bo[u]) continue;
bo[u]=1;
for(int i=0;i<e[u].size();i++){
if(f[1][e[u][i]]>f[1][u]+1){
q.push(e[u][i]);
bo[e[u][i]]=0;
f[1][e[u][i]]=f[1][u]+1;
}
}
}
memset(bo,0,sizeof(bo));
f[2][s1]=0;
q.push(s1);
while(!q.empty()){
ll u=q.front();
q.pop();
if(bo[u]) continue;
bo[u]=1;
for(int i=0;i<e[u].size();i++){
ll po=0;
po=1;
if(f[2][e[u][i]]>f[2][u]+1){
q.push(e[u][i]);
bo[e[u][i]]=0;
f[2][e[u][i]]=f[2][u]+1;
}
}
}
memset(bo,0,sizeof(bo));
f[3][s2]=0;
q.push(s2);
while(!q.empty()){
ll u=q.front();
q.pop();
if(bo[u]) continue;
bo[u]=1;
for(int i=0;i<e[u].size();i++){
if(f[3][e[u][i]]>f[3][e[u][i]]+1){
q.push(e[u][i]);
bo[e[u][i]]=0;
f[3][e[u][i]]=f[3][u]+1;
}
}
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=m;i++){
cin>>u>>v;
pb(u,v);
pb(v,u);
}
memset(f,0x3f3f3f,sizeof(f));
cin>>s1>>t1>>s2>>t2;
dj();
ans=LONG_LONG_MAX;
for(int i=1;i<=n;i++){
if(f[1][i]+f[2][i]<=t1&&f[1][i]+f[3][i]<=t2){
ans=min(ans,f[1][i]+f[2][i]+f[3][i]);
}
}
if(ans==LONG_LONG_MAX) {
cout<<-1;
return 0;
}
cout<<m-ans;
}
不知道哪里错了