#include <bits/stdc++.h>
using namespace std;
namespace z {
#define int long long
const int N = 2e5 + 5;
int n, m, A, B, C;
int x[N], y[N], p[N], q[N];
int f[N];
deque<int> dq[N];
vector<int> bg[N];
vector<int> ed[N];
vector<int> wt[N];
int X(int j) { return q[j];}
int Y(int j) { return f[j] - B * q[j] + A * q[j] * q[j]; }
long double K(int i, int j) { return (long double)(Y(i) - Y(j)) / (X(i) - X(j)); }
void main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);cout.tie(nullptr);
cin >> n >> m >> A >> B >> C;
for(int i = 1; i <= n; i++) dq[i].clear();
for(int i = 1; i <= m; i++) {
cin >> x[i] >> y[i] >> p[i] >> q[i];
bg[p[i]].push_back(i);
ed[q[i]].push_back(i);
}
ed[0].push_back(0); y[0] = 1;
int T = *max_element(q + 1, q + m + 1);
for(int i = 0; i <= T; i++) {
for(int j : ed[i]) {
wt[y[j]].push_back(j);
}
for(int j : bg[i]) {
for(int k : wt[x[j]]) {
int t = y[k];
while(dq[t].size() >= 2 && K(dq[t][dq[t].size() - 2], dq[t].back()) > K(dq[t].back(), k))
dq[t].pop_back();
dq[t].push_back(k);
}
wt[x[j]].clear();
while(dq[x[j]].size() >= 2 && K(dq[x[j]][0], dq[x[j]][1]) < 2 * A * p[j])
dq[x[j]].pop_front();
if(dq[x[j]].size()) {
int k = dq[x[j]].front();
f[j] = f[k] + A * (p[j] - q[k]) * (p[j] - q[k]) + B * (p[j] - q[k]) + C;
} else f[j] = 1e14;
}
}
int ans = 9e18;
for(int i = 1; i <= m; i++)
if(y[i] == n) ans = min(ans, f[i] + q[i]);
cout << ans << '\n';
}
#undef int
}
int main()
{
z::main();
return 0;
}