#include <bits/stdc++.h>
using namespace std;
class Point {
 public:
  int x, y;
  Point(int _x, int _y) {
    x = _x;
    y = _y;
  }
  Point() {}
  Point operator+(const Point &p) { return Point(x + p.x, y + p.y); }
  Point operator-(const Point &p) { return Point(x - p.x, y - p.y); }
  int len2() { return x * x + y * y; }
  void read() { scanf("%d%d", &x, &y); }
  double len() { return sqrt(x * x + y * y); }
};
double getDist(Point A, Point B, Point X) {
  double ret = min((X - A).len(), (X - B).len());
  if ((X.x - A.x) * (X.x - B.x) <= 0) ret = min(ret, (double)abs(X.y - A.y));
  if ((X.y - A.y) * (X.y - B.y) <= 0) ret = min(ret, (double)abs(X.x - A.x));
  return ret;
}
double minDist(Point A, Point B, Point C, Point D) {
  double r1 = min(getDist(A, B, C), getDist(A, B, D));
  double r2 = min(getDist(C, D, A), getDist(C, D, B));
  return min(r1, r2);
}
Point p[2005];
double dist[2005];
int cyc[2005];
int u[2005];
int main(void) {
  int a, b;
  scanf("%d%d", &a, &b);
  p[0].read();
  p[1].read();
  int n;
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    p[i * 2].read();
    p[i * 2 + 1].read();
  }
  for (int i = 0; i < n * 2 + 2; i++) {
    dist[i] = 1e100;
    cyc[i] = 5000;
  }
  dist[0] = 0;
  cyc[0] = 0;
  while (1) {
    int x = -1;
    for (int i = 0; i < n * 2 + 2; i++)
      if (!u[i] && (x == -1 || dist[i] < dist[x])) x = i;
    if (x == -1) break;
    if (dist[x] > 1e50) break;
    u[x] = 1;
    for (int i = 0; i < n * 2 + 2; i++) {
      int target = (i == (x ^ 1) && x > 0);
      double rV = minDist(p[x], (x < 2 ? p[x] : p[x ^ 1]), p[i],
                          (i < 2 ? p[i] : p[i ^ 1]));
      if (!u[i] && (target || rV * rV <= a * a)) {
        double v = cyc[x] * (a + b) + rV;
        if (target) v = dist[x] + (p[x] - p[i]).len();
        if (dist[i] > v) {
          dist[i] = v;
          cyc[i] = cyc[x] + !target;
        }
      }
    }
  }
  if (dist[1] < 1e50)
    printf("%.9f\n", dist[1]);
  else
    puts("-1");
  return 0;
}
