#include<bits/stdc++.h>
#define x first
#define y second
#define sqr(x) ((x)*(x))
#define mp(x,y) make_pair((x),(y))
using namespace std;
double m[1005][1005];
int main(){
	pair<double,double> p[1005]; 
	scanf("%lf %lf",&p[0].x,&p[0].y);
	scanf("%lf %lf",&p[1].x,&p[1].y);
	int n;
	double r[1005];
	r[0]=0,r[1]=0;
	scanf("%d",&n);
	for(int i=2;i<=n+1;i++)
	scanf("%lf %lf %lf",&p[i].x,&p[i].y,&r[i]);
	for(int i=0;i<n+2;i++)
	for(int j=0;j<n+2;j++){
		m[i][j]=max(sqrt(sqr(p[i].x-p[j].x)+sqr(p[i].y-p[j].y))-r[i]-r[j],0.0);
	}
	priority_queue< pair<double,int>,vector<pair<double,int> >,greater<pair<double,int> > > pq;
	pq.push(mp(0,0));
	int visit[1005];
	memset(visit,0,sizeof(visit));
	while(!pq.empty()){
		pair<double,int> p=pq.top();pq.pop();
		if(visit[p.y])
		continue;
		visit[p.y]=1;
		if(p.y==1){
		printf("%.10lf\n",p.x);
		return 0;
		}
		for(int i=0;i<n+2;i++){
			if(!visit[i])
			pq.push(mp(p.x+m[p.y][i],i));
		}
	}
} 