#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1e9 + 7;
const long long PI = 3.14159265;
const int MAXN = 1E3 + 10;
const long long INF = 1E9;
int s[MAXN][2][2];
long long rr(long long x, long long y) { return (x * x + y * y); }
bool line(int x1, int x0, int x2) { return ((x1 - x0) * (x2 - x0) <= 0); }
long long dist2(int i, int j) {
  long long res = INF;
  vector<int> xx, yy;
  for (auto c : {0, 1}) {
    xx.push_back(s[i][c][0]);
    xx.push_back(s[j][c][0]);
    yy.push_back(s[i][c][1]);
    yy.push_back(s[j][c][1]);
  }
  for (auto x1 : xx)
    for (auto y1 : yy)
      if (line(s[i][0][0], x1, s[i][1][0]) && line(s[i][0][1], y1, s[i][1][1]))
        for (auto x2 : xx)
          for (auto y2 : yy)
            if (line(s[j][0][0], x2, s[j][1][0]) &&
                line(s[j][0][1], y2, s[j][1][1])) {
              res = min(res, rr(x1 - x2, y1 - y2));
            }
  return res;
}
int n;
vector<int> lst[MAXN];
bool used[MAXN];
vector<int> d(MAXN, INF);
queue<int> q;
int a, b;
int Ax, Ay, Bx, By;
int main() {
  ios::sync_with_stdio(false);
  cin >> a >> b >> Ax >> Ay >> Bx >> By >> n;
  s[0][0][0] = s[0][1][0] = Ax;
  s[0][0][1] = s[0][1][1] = Ay;
  s[n + 1][0][0] = s[n + 1][1][0] = Bx;
  s[n + 1][0][1] = s[n + 1][1][1] = By;
  for (int i = 1; i <= n; i++)
    for (auto c : {0, 1})
      for (auto d : {0, 1}) cin >> s[i][c][d];
  for (int i = 0; i < n; i++)
    for (int j = i + 1; j <= n; j++)
      if (dist2(i, j) <= a * a) {
        lst[i].push_back(j);
        lst[j].push_back(i);
      }
  used[0] = true;
  q.push(0);
  d[0] = 0;
  while (!q.empty()) {
    int x = q.front();
    q.pop();
    for (auto y : lst[x])
      if (!used[y]) {
        used[y] = true;
        q.push(y);
        d[y] = d[x] + a + b;
      }
  }
  double answ = INF;
  for (int i = 0; i <= n; i++) {
    long long tmp = dist2(i, n + 1);
    if (tmp <= a * a) answ = min(answ, d[i] + sqrt(1.0 * tmp));
  }
  if (answ == INF) answ = -1;
  cout << answ << endl;
}
