#include "bits/stdc++.h"
using namespace std;
#define rep(i,n) for(int i=0;i<n;i++)
#define REP(i,x,n) for(int i=x;i<n;i++)
#define ALL(v) (v).begin(),(v).end()
#define MP(a,b) make_pair(a,b)
typedef long long LL;
typedef pair<int, int> PI;
typedef vector<int> VI;
typedef pair<double, int> P;
const LL MOD = 1000000007LL;
int x[1002], y[1002], r[1002];
double G[1002][1002];
double dist[1002];
int main() {
	int xs, ys, xt, yt;
	cin >> xs >> ys >> xt >> yt;
	int N;
	cin >> N;
	REP(i, 1, N + 1) {
		cin >> x[i] >> y[i] >> r[i];
	}
	x[0] = xs;
	y[0] = ys;
	x[N + 1] = xt;
	y[N + 1] = yt;
	rep(i, N + 2) {
		rep(j, N + 2) {
			G[i][j] = max(sqrt(pow(x[i] - x[j], 2) + pow(y[i] - y[j], 2)) - r[i] - r[j], 0.0);
		}
	}
	fill(dist, dist + (N + 2), DBL_MAX);
	priority_queue<P, vector<P>, greater<P> > Q;
	dist[0] = 0;
	Q.push(MP(0, 0));
	while (!Q.empty()) {
		P p = Q.top(); Q.pop();
		if (p.first > dist[p.second]) continue;
		rep(i, N + 2) {
			if (dist[i] > dist[p.second] + G[p.second][i]) {
				dist[i] = dist[p.second] + G[p.second][i];
				Q.push(MP(dist[p.second] + G[p.second][i], i));
			}
		}
	}
	printf("%.15lf\n", dist[N + 1]);
}