#include<iostream>
#include<cstdio>
using namespace std;
int n,m,x,y,dis[3005][3005];
int q[10005],font=10004,back=10004,s1,s2,t1,t2,i,sum=0;
int d1[3005],d2[3005],d3[3005],vis[3005]={0};
long long maxn=1e9;
int minn=maxn;
void push(int x){
q[back]=x;
back--;
}
void pop(){font--;}
int front(){return q[font];}
bool empty(){return back==font;}
void SPFA(int u,int *d)
{
int j,k;
for(i=1;i<=n;i++)d[i]=maxn;
d[u]=0;
push(u);
vis[u]=1;
while(!empty())
{
int x=front();
pop();
for(j=1;j<=n;j++)
{
if(x!=j&&dis[x][j]==1&&d[j]>d[x]+1)
{
d[j]=d[x]+1;
if(!vis[j])
{
push(j);
vis[j]=1;
}
}
}
}
}
int main()
{
scanf("%d%d",&n,&m);
for(i=1;i<=m;i++)
{
scanf("%d%d",&x,&y);
dis[x][y]=1;
dis[y][x]=1;
sum++;
}
scanf("%d%d%d%d",&s1,&t1,&s2,&t2);
SPFA(1,d1);
SPFA(s1,d2);
SPFA(s2,d3);
for(i=1;i<=n;i++)
{
if(d1[i]+d2[i]<=t1&&d1[i]+d3[i]<=t2)
minn=min(d1[i]+d2[i]+d3[i],minn);
}
if(minn==maxn)printf("-1");
else printf("%d",sum-minn);
return 0;
}