rt
#include<bits/stdc++.h>
using namespace std;
int n,m,x,y,s1,t1,s2,t2,c[3005][3005],ro[3][3005],ans=1e9;
void bfs(int k)
{
queue<pair<int,int> >q;
int l;
if(k==0)l=1;
if(k==1)l=s1;
if(k==2)l=s2;
for(int i=1;i<=c[l][0];i++)
{
ro[k][c[l][i]]=1;
q.push(make_pair(c[l][i],1));
}
while(!q.empty())
{
int f1=q.front().first;
int f2=q.front().second;
for(int i=1;i<=c[f1][0];i++)
{
if(f2+1<ro[k][c[f1][i]])
{
ro[k][c[f1][i]]=f2+1;
q.push(make_pair(c[f1][i],f2+1));
}
}
q.pop();
}
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
{
scanf("%d%d",&x,&y);
c[x][++c[x][0]]=y;
c[y][++c[y][0]]=x;
}
scanf("%d%d%d%d",&s1,&t1,&s2,&t2);
memset(ro,0x3f,sizeof(ro));
bfs(0);bfs(1);bfs(2);
for(int i=1;i<=n;i++)
{
if(ro[0][i]+ro[1][i]<=t1&&ro[0][i]+ro[2][i]<=t2)
{
ans=min(ans,ro[0][i]+ro[1][i]+ro[2][i]);
}
}
if(ans==1e9)ans=-1;
else ans=m-ans;
printf("%d",ans);
return 0;
}