// AOJ 2300

#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstdio>

using namespace std;

double l[30], a[30], b[30];
bool used[30];
double ret;
int n, m;

double dis(int c, int d)
{
	return pow(l[c] - l[d], 2.0) + pow(a[c] - a[d], 2.0) + pow(b[c] - b[d], 2.0);
}
double rec()
{
	double r = 0;
	for (int i = 0; i < n; i++){
		for (int j = i+1; j < n; j++){
			if (used[i] && used[j]){
				r += dis(i, j);
			}
		}
	}

	return r;
}
void dfs(int cnt, int depth, int num)
{
	if (depth == n){
		if (cnt == m){
			ret = max(ret, rec());
		}
		return;
	}

	// num を使わない
	dfs(cnt, depth + 1, num + 1);
	// num を使う
	used[num] = true;
	dfs(cnt + 1, depth + 1, num + 1);
	// きちんと使ったものはもどしておく
	used[num] = false;
}

int main(void)
{
	cin >> n >> m;
	fill(used, used + 30, false);
	for (int i = 0; i < n; i++){
		cin >> l[i] >> a[i] >> b[i];
	}

	dfs(0, 0, 0);

	printf("%.8f\n", ret);

	return 0;
}