#include <bits/stdc++.h>
using namespace std;
ifstream in("elicoptere.in");
ofstream out("elicoptere.out");
int c;
int n,k,nr,comp[105],q,nrc,p[105],h[105];
double d,ans3;
bool vis[105];
int cr,ans;
vector<int> e[105];
struct tri
{
double l1,c1,l2,c2,l3,c3;
}v[105];
struct muchie
{
int x,y;
double c;
}m[6000],aux[6000];
bool cmp(muchie a,muchie b)
{
return a.c<b.c;
}
void dfs(int nod)
{
vis[nod]=1;
comp[nod]=nrc;
for(auto it:e[nod])
if(vis[it]==0)
{
dfs(it);
cr++;
}
}
double dp(double x,double y,double x2,double y2)
{
return sqrt((x-x2)*(x-x2)+(y-y2)*(y-y2));
}
double dist(double x,double y,double x2,double y2,double x3,double y3)
{
double d=1e9;
double a=y3-y2;
double b=x2-x3;
double c=x2*(y2-y3)+y2*(x3-x2);
if(x>=min(x2,x3)&&x<=max(x3,x3))
{
double nx=x;
double ny=(-c-a*x)/b;
d=min(d,dp(x,y,nx,ny));
}
if(y>=min(y2,y3)&&y<=max(y3,y3))
{
double ny=y;
double nx=(-c-b*y)/a;
d=min(d,dp(x,y,nx,ny));
}
return d;
}
double verif(int t1,int t2)
{
double dmin=1e9;
dmin=min(dmin,dist(v[t1].l1,v[t1].c1,v[t2].l1,v[t2].c1,v[t2].l2,v[t2].c2));
dmin=min(dmin,dist(v[t1].l1,v[t1].c1,v[t2].l1,v[t2].c1,v[t2].l3,v[t2].c3));
dmin=min(dmin,dist(v[t1].l1,v[t1].c1,v[t2].l2,v[t2].c2,v[t2].l3,v[t2].c3));
dmin=min(dmin,dist(v[t1].l2,v[t1].c2,v[t2].l1,v[t2].c1,v[t2].l2,v[t2].c2));
dmin=min(dmin,dist(v[t1].l2,v[t1].c2,v[t2].l1,v[t2].c1,v[t2].l3,v[t2].c3));
dmin=min(dmin,dist(v[t1].l2,v[t1].c2,v[t2].l2,v[t2].c2,v[t2].l3,v[t2].c3));
dmin=min(dmin,dist(v[t1].l3,v[t1].c3,v[t2].l1,v[t2].c1,v[t2].l2,v[t2].c2));
dmin=min(dmin,dist(v[t1].l3,v[t1].c3,v[t2].l1,v[t2].c1,v[t2].l3,v[t2].c3));
dmin=min(dmin,dist(v[t1].l3,v[t1].c3,v[t2].l2,v[t2].c2,v[t2].l3,v[t2].c3));
return dmin;
}
int find(int x)
{
int r=x;
while(r!=p[r]) r=p[r];
while(p[x]!=r)
{
int temp=p[x];
p[x]=r;
x=temp;
}
return r;
}
void Union(int x,int y)
{
int rx=find(x);
int ry=find(y);
if(rx!=ry)
{
if(h[rx]>h[ry]) p[ry]=rx;
else if(h[rx]<h[ry]) p[rx]=ry;
else p[rx]=ry,++ry;
}
}
double apm()
{
double cmin=0;
int k=0;
for(int i=1;i<=n;i++) p[i]=i,h[i]=1;
for(int i=1;i<=q&&k<cr-1;i++)
{
if(find(aux[i].x)!=find(aux[i].y))
{
Union(aux[i].x,aux[i].y);
ans3+=aux[i].c;
k++;
}
}
return cmin;
}
int main()
{
in>>c;
in>>n>>k;
for(int i=1;i<=n;i++) in>>v[i].l1>>v[i].c1>>v[i].l2>>v[i].c2>>v[i].l3>>v[i].c3;
for(int i=1;i<=n;i++)
{
for(int j=i+1;j<=n;j++)
{
d=verif(i,j);
if(d<=1.0*k) {
m[++nr]={i,j,d};
e[i].push_back(j);
e[j].push_back(i);
}
}
}
if(c==1)
{
for(int i=1;i<=n;i++)
if(vis[i]==0)
{
cr=0;
dfs(i);
ans+=cr;
}
out<<ans;
}
if(c==2)
{
for(int i=1;i<=n;i++)
if(vis[i]==0)
{
cr=1;
dfs(i);
ans+=cr*(cr-1)/2;
}
out<<ans;
}
if(c==3)
{
for(int i=1;i<=n;i++)
if(vis[i]==0)
{
cr=1;
++nrc;
dfs(i);
q=0;
for(int j=1;j<=nr;j++)
if(comp[m[j].x]==nrc) aux[++q]=m[j];
sort(aux+1,aux+q+1,cmp);
ans3+=apm();
}
out<<ans3;
}
return 0;
}