#include <bits/stdc++.h>
using namespace std;
struct segment {
  int x1, y1, x2, y2;
};
int t1, t2, n, numtre[1002];
segment segs[1002];
double dis[1002][1002], t[1002];
bool visited[1002];
double dist(int x, int y) {
  int x1 = max(segs[x].x1, segs[y].x1);
  int x2 = min(segs[x].x2, segs[y].x2);
  int y1 = max(segs[x].y1, segs[y].y1);
  int y2 = min(segs[x].y2, segs[y].y2);
  return sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
  return 0.0;
}
void bfs() {
  list<int> q;
  q.push_back(0);
  t[0] = 0;
  numtre[0] = 0;
  visited[0] = true;
  while (!q.empty()) {
    int current = q.front();
    q.pop_front();
    for (int i = 0; i < n + 2; i++) {
      if (i != current) {
        if (dis[current][i] <= (double)t1 &&
            (dis[current][i] + (double)numtre[current] * (t2 + t1) < t[i] ||
             t[i] == -1)) {
          t[i] = dis[current][i] + numtre[current] * (t2 + t1);
          numtre[i] = numtre[current] + 1;
          if (!visited[i]) {
            q.push_back(i);
            visited[i] = true;
          }
        }
      }
    }
  }
}
int main() {
  ios::sync_with_stdio(false);
  cin >> t1 >> t2;
  int a, b, c, d;
  cin >> a >> b >> c >> d;
  segs[0].x1 = segs[0].x2 = a;
  segs[0].y1 = segs[0].y2 = b;
  segs[1].x1 = segs[1].x2 = c;
  segs[1].y1 = segs[1].y2 = d;
  cin >> n;
  t[1] = -1;
  visited[1] = false;
  for (int i = 2; i < n + 2; i++) {
    cin >> a >> b >> c >> d;
    segs[i].x1 = min(a, c);
    segs[i].y1 = min(b, d);
    segs[i].x2 = max(a, c);
    segs[i].y2 = max(b, d);
    t[i] = -1;
    visited[i] = false;
  }
  for (int i = 0; i < n + 2; i++) {
    for (int j = i + 1; j < n + 2; j++) {
      dis[i][j] = dist(i, j);
      dis[j][i] = dis[i][j];
    }
  }
  bfs();
  if (!visited[1])
    cout << -1;
  else
    printf("%.8f", t[1]);
  return 0;
}
