#include <cstdio>
#include <cmath>

double INF = 1e20;

int p[1100][3]; // x, y, r
double dist[1100][1100];
double dij[1100]; bool vs[1100];

double getdist(int i1, int i2){
  int dx = p[i1][0] - p[i2][0], dy = p[i1][1] - p[i2][1];
  double cd = sqrt(1LL * dx * dx + 1LL * dy * dy);

  if(cd > p[i1][2] + p[i2][2]) return cd - p[i1][2] - p[i2][2];
  else return 0;
}

int main(){
  scanf("%d%d%d%d", &p[0][0], &p[0][1], &p[1][0], &p[1][1]);
  int N; scanf("%d", &N); N += 2;
  for(int i = 2; i < N; i++) scanf("%d%d%d", &p[i][0], &p[i][1], &p[i][2]);

  for(int i = 0; i < N; i++){
    dist[i][i] = 0.0;
    for(int j = i + 1; j < N; j++) dist[i][j] = dist[j][i] = getdist(i, j);
  }

  for(int i = 0; i < N; i++) dij[i] = INF;
  dij[0] = 0.0;

  for(int n = 0; n < N; n++){
    double md = INF; int now = -1;
    for(int i = 0; i < N; i++) if(dij[i] < md && !vs[i]){ md = dij[i]; now = i; }

    vs[now] = true;
    for(int i = 0; i < N; i++){
      if(!vs[i]){
        double nd = md + dist[now][i];
        if(nd < dij[i]) dij[i] = nd;
      }
    }
  }

  printf("%.15lf\n", dij[1]);
  return 0;
}