#include <bits/stdc++.h>

#define rep2(x,fr,to) for(int (x)=(fr);(x)<(to);(x)++)
#define rep(x,to) for(int (x)=0;(x)<(to);(x)++)
#define repr(x,fr,to) for(int (x)=(fr);(x)>=(to);(x)--)
#define all(c) (c).begin(),(c).end()
#define sz(v) (int)(v).size()

using namespace std;
typedef long long ll; typedef vector<int> VI; typedef pair<int, int> pii;
const int mod = (int)1e9 + 7;

vector<vector<bool>> maj;

double cvv(double a, double b){return a*a + b*b; };
vector<vector<pair<int, double>>> r;

const double INF = 1e22;

int main()
{

	int xs,ys,xt,yt, n;
	cin >>xs >>ys >>xt >>yt >>n;
	VI xx(n+2), yy(n+2), rr(n+2);
	rep(i,n) cin >> xx[i] >> yy[i] >> rr[i];
	xx[n]=xs; yy[n]=ys; rr[n]=0;
	xx[n+1]=xt; yy[n+1]=yt; rr[n+1]=0;
	
	
	
	vector<double>  d(n+4,INF);
	d[n]=0;
	vector<char> usd(n+4,0);
	
	for(;;){
		int v= -1;
		rep(u, n+2){
			if(!usd[u] && (v==-1 || d[u] < d[v])) v =u;
		}
		if(v ==-1) break;
		usd[v] = 1;
		rep(u, n+2){
			double ky =max(0.0, sqrt(cvv(xx[u]-xx[v], yy[u]-yy[v])) - (rr[u]+rr[v]));
			d[u] = min(d[u], d[v] + ky);
		}
	}



	
	printf("%.15f\n", d[n+1]);
	return 0;
}
