#include using namespace std; typedef long long ll; typedef vector VI; typedef vector VVI; #define REP(i, n) for(int(i)=0;(i)<(n);++(i)) #define FOR(i, f, t) for(int(i)=(f);(i)<(t);(++i)) const int MOD = int(1e9+7); struct VEC3D{ double x,y,z; VEC3D(){} VEC3D(double x, double y, double z):x(x),y(y),z(z){} VEC3D operator-(const VEC3D& v) const{return VEC3D(x-v.x,y-v.y,z-v.z);} VEC3D operator*(const VEC3D& vr) const{return VEC3D((y*vr.z)-(z*vr.y),(z*vr.x)-(x*vr.z),(x*vr.y)-(y*vr.x));} void norm(){double l=pow((x*x)+(y*y)+(z*z),.5);x/=l,y/=l,z/=l;} }; struct PLANE3D{ double a,b,c,d; PLANE3D(){} PLANE3D(double a, double b, double c, double d) :a(a),b(b),c(c),d(d){} PLANE3D(const VEC3D v1, const VEC3D v2, const VEC3D v3){ VEC3D v12 = v2 - v1, v23 = v3 - v2, norm = v12 * v23; norm.norm(); a=norm.x, b=norm.y, c=norm.z; d = v1.x * norm.x + v1.y * norm.y + v1.z * norm.z; } }; double dot3d(const VEC3D &a, const VEC3D &b){ return a.x * b.x + a.y * b.y + a.z * b.z; } // 点と平面の距離 double dist_d2p(const VEC3D &a, const PLANE3D &pl){ VEC3D n(pl.a, pl.b, pl.c); VEC3D p(pl.a*pl.d, pl.b*pl.d, pl.c*pl.d); VEC3D pa = p - a; return abs(dot3d(n,pa)); } int N; VEC3D V[333]; int main(){ cin >> N; double PX,PY,PZ; cin >> PX >> PY >> PZ; VEC3D P(PX,PY,PZ); REP(i,N){ double x,y,z; cin >> x >> y >> z; V[i] = VEC3D(x,y,z); } double res = 0; REP(i,N)FOR(j,i+1,N)FOR(k,j+1,N){ res += dist_d2p(P, PLANE3D(V[i],V[j],V[k])); } cout << fixed << setprecision(15) << res << endl; return 0; }