#include<bits/stdc++.h>
using namespace std;
int n,m,s,ss,tt,t,d[3010][4],sum=1e9;
vector<int> v[3010];
queue<int> q;
bool b;
long long INF= 0x3f3f3f3f;
void f(int st,int se,int e,int w)
{
if(st==se)
{
d[w][e]=0;
return;
}
int dd[3010];
memset(dd,INF,sizeof(dd));
q.push(st);
dd[st]=0;
while(!q.empty())
{
int x=q.front();
q.pop();
for(int i=0;i<v[x].size();i++)
{
if(dd[v[x][i]]==INF)
{
q.push(v[x][i]);
dd[v[x][i]]=dd[x]+1;
}
}
}
d[w][e]=dd[se];
return;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=m;i++)
{
int x,y;
cin>>x>>y;
v[x].push_back(y);
v[y].push_back(x);
}
cin>>s>>t>>ss>>tt;
for(int i=1;i<=n;i++)
{
f(1,i,1,i);
f(i,s,2,i);
f(i,ss,3,i);
if(sum>=d[i][1]+d[i][2]+d[i][3])
{
if(d[i][1]+d[i][2]<=t&&d[i][1]+d[i][3]<=tt)
{
b=1;
sum=d[i][1]+d[i][2]+d[i][3];
}
}
}
if(b==0)cout<<-1;
else cout<<m-sum;
}