#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 3005;
vector<int> g[N];
int dis[N], dis1[N], dis2[N];
void dfs(int x, int fa, int *dis)
{
for(auto y : g[x])
{
if(y == fa)continue;
if(dis[y] > dis[x] + 1)
{
dis[y] = dis[x] + 1;
dfs(y, x, dis);
}
}
}
signed main()
{
int n, m;
cin >> n >> m;
int c = m;
while(m --)
{
int x, y;
cin >> x >> y;
g[x].push_back(y);
g[y].push_back(x);
}
int s1, t1, s2, t2;
cin >> s1 >> t1 >> s2 >> t2;
memset(dis, 0x3f, sizeof dis);
memset(dis1, 0x3f, sizeof dis1);
memset(dis2, 0x3f, sizeof dis2);
dis[1] = 0;
dis1[s1] = 0;
dis2[s2] = 0;
dfs(1, -1, dis);
dfs(s1, -1, dis1);
dfs(s2, -1, dis2);
if(dis[s1] > t1 or dis[s2] > t2)
{
cout << -1;
return 0;
}
int ans = 2e9;
for(int i = 1 ; i <= n ; i ++)ans = min(ans, dis[i] + dis1[i] + dis2[i]);
cout << c - ans;
return 0;
}