#include<bits/stdc++.h>
using namespace std;
const int MAXN=3005,MAXM=6005;
int n,m,s1,t1,s2,t2;
int h[MAXN],e[MAXM],ne[MAXM],tot=1;
inline void add(int x,int y){
e[tot]=y;
ne[tot]=h[x];
h[x]=tot++;
}
queue<int>que;
int dis[3][MAXN];
inline void bfs(int rt,int *d){
d[rt]=0;
que.push(rt);
while(!que.empty()){
int u=que.front();que.pop();
for(int i=h[u];i;i=ne[i]){
d[e[i]]=min(d[e[i]],d[i]+1);
que.push(e[i]);
}
}
}
int main(){
ios::sync_with_stdio(NULL);
cin.tie(0);cout.tie(0);
memset(dis,0x3f,sizeof dis);
cin>>n>>m;
for(int i=1;i<=m;i++){
int x,y;cin>>x>>y;
add(x,y);add(y,x);
}
cin>>s1>>t1>>s2>>t2;
bfs(1,dis[0]);
bfs(s1,dis[1]);
bfs(s2,dis[2]);
int ans=2e9;
for(int i=1;i<=n;i++){
if(dis[0][i]+dis[1][i]<=t1&&dis[0][i]+dis[2][i]<=t2)
ans=min(ans,dis[0][i]+dis[1][i]+dis[2][i]);
}
if(ans==2e9) ans=-1;
else ans=m-ans;
cout<<ans;
return 0;
}
O2全是MLE,不开O2全是TLE&MLE