#include <bits/stdc++.h>
using namespace std;
#define fo(i,a,b) for(int i=(a);i<(b);i++)
#define MOD 1000000007
#define MP make_pair
#define PB push_back
typedef long long ll;

struct circ {
        ll x, y, r;
} p[1100];

long double dis (circ a, circ b) {
        ll d = (a.x-b.x)*(a.x-b.x) + (a.y-b.y)*(a.y-b.y);
        if (d <= (a.r+b.r)*(a.r+b.r)) return 0.0;
        long double x = sqrt((long double) d);
        return x - ((long double) a.r+b.r);
}

int N;
bool seen[1100];
long double res[1100];

int main () {
        scanf("%lld %lld %lld %lld %d", &p[0].x, &p[0].y, &p[1].x, &p[1].y, &N);
        p[0].r=p[1].r=0ll;
        fo(i, 2, N+2) scanf("%lld %lld %lld", &p[i].x, &p[i].y, &p[i].r);

        fo(i, 1, N+2) res[i] = 8e18;
        fo(i, 0, N+2) {
                int mni = -1; fo(j, 0, N+2) if (!seen[j] && (mni==-1 || res[j]<res[mni])) mni = j;
                seen[mni] = 1;
                fo(j, 0, N+2) res[j] = min(res[j], res[mni] + dis(p[mni], p[j]));
        }
        printf("%.10Lf\n", res[1]);
        return 0;
}
