#include <iostream>
#include <vector>
#include <limits>
using namespace std;

// float pinf = std::numeric_limits<float>::infinity();
//double pinf = INFINITY;
// これはどうやって使う？ #define INFINITY inf;
const int INF = 100000000;

void floyd_warshall(vector<vector<int>>& K) {
	for (int k = 0; k < K.size(); k++) {
		for (int i = 0; i < K.size(); i++) {
			for (int j = 0; j < K.size(); j++) {
				if (K.at(i).at(k) + K.at(k).at(j) < K.at(i).at(j)) {
					K.at(i).at(j) = K.at(i).at(k) + K.at(k).at(j);
				}
			}
		}
	}
}

int main(void) {
	// 隣接行列の作成
	int n, m;
	cin >> n >> m;
	vector<vector<int>> K(n, vector<int>(n, INF));
	int a, b, c, d;
	while(m--) {
		cin >> a;
		cin.ignore();
		cin >> b;
		cin.ignore();
		cin >> c;
		cin.ignore();
		cin >> d;
		K.at(a-1).at(b-1) = c;
		K.at(b-1).at(a-1) = d;
	}

	int s, g, V, P;
	cin >> s;
	cin.ignore();
	cin >> g;
	cin.ignore();
	cin >> V;
	cin.ignore();
	cin >> P;

//	for(auto x:K) {
//		for(auto i:x) {
//			cout << i;
//		}
//		cout << " " << endl;
//	}
	floyd_warshall(K);

	int ans;
	ans = V - P - K.at(s-1).at(g-1) - K.at(g-1).at(s-1);
	cout << ans << endl;

//	for(auto x:K) {
//		for(auto i:x) {
//			cout << i;
//		}
//		cout << " " << endl;
//	}
}

