#include <bits/stdc++.h>
using namespace std;
template <class T>
inline T sqr(T _t) {
  return _t * _t;
}
template <class T>
inline T det(T x1, T y1, T x2, T y2) {
  return x1 * y2 - x2 * y1;
}
template <class T>
inline T cross(pair<T, T> a, pair<T, T> b, pair<T, T> c) {
  return det(b.first - a.first, b.second - a.second, c.first - a.first,
             c.second - a.second);
}
template <class T>
inline T dist2(pair<T, T> a, pair<T, T> b) {
  T m = a.first - b.first, n = a.second - b.second;
  return m * m + n * n;
}
template <class T>
double dist(pair<T, T> a, pair<T, T> b) {
  return sqrt(double(dist2(a, b)));
}
template <class T>
inline T dotdet(T x1, T y1, T x2, T y2) {
  return x1 * x2 + y1 * y2;
}
template <class T>
inline T dot(pair<T, T> a, pair<T, T> b, pair<T, T> c) {
  return dotdet(b.first - a.first, b.second - a.second, c.first - a.first,
                c.second - a.second);
}
template <class T>
double Area(pair<T, T> a, pair<T, T> b, pair<T, T> c) {
  return double(cross(a, b, c)) * 0.5;
}
istream &operator>>(istream &in, pair<int, int> &p) {
  in >> p.first >> p.second;
  return in;
}
istream &operator>>(istream &in, pair<pair<int, int>, pair<int, int> > &s) {
  in >> s.first >> s.second;
  return in;
}
const int maxn = 2000;
int a, b;
pair<pair<int, int>, pair<int, int> > s[maxn];
pair<int, int> A, B;
int d[maxn], n;
template <class T>
inline T dist2(pair<pair<T, T>, pair<T, T> > seg, pair<T, T> point) {
  if (seg.first.first == seg.second.first) {
    return (min(seg.first.second, seg.second.second) <= point.second &&
            point.second <= max(seg.first.second, seg.second.second))
               ? sqr(abs(seg.first.first - point.first))
               : min(dist2(seg.first, point), dist2(seg.second, point));
  } else {
    return (min(seg.first.first, seg.second.first) <= point.first &&
            point.first <= max(seg.first.first, seg.second.first))
               ? sqr(abs(seg.first.second - point.second))
               : min(dist2(seg.first, point), dist2(seg.second, point));
  }
}
template <class T>
inline T dist2(pair<pair<T, T>, pair<T, T> > seg1,
               pair<pair<T, T>, pair<T, T> > seg2) {
  return min(min(dist2(seg2, seg1.first), dist2(seg2, seg1.second)),
             min(dist2(seg1, seg2.first), dist2(seg1, seg2.second)));
}
int main(void) {
  queue<int> q;
  ios::sync_with_stdio(false);
  memset(d, -1, sizeof d);
  cin >> a >> b >> A >> B >> n;
  for (int i = 0; i < (n); ++i) {
    cin >> s[i];
    if (dist2(s[i], A) <= a * a) d[i] = 1, q.push(i);
  }
  while (!q.empty()) {
    int first = q.front();
    q.pop();
    for (int i = 0; i < (n); ++i)
      if (d[i] == -1 && dist2(s[first], s[i]) <= a * a)
        d[i] = d[first] + 1, q.push(i);
  }
  double ans = 1e100;
  if (dist2(A, B) <= a * a) ans = dist(A, B);
  for (int i = 0; i < (n); ++i)
    if (d[i] >= 0 && dist2(s[i], B) <= a * a)
      ans = min(ans, (a + b) * d[i] + sqrt(double(dist2(s[i], B))));
  cout << fixed;
  cout.precision(200);
  cout << (ans >= 1e90 ? -1 : ans) << endl;
}
