Problem:
Score : 500 points

Problem Statement

Takahashi has come to a party as a special guest.
There are N ordinary guests at the party. The i-th ordinary guest has a power of A_i.

Takahashi has decided to perform M handshakes to increase the happiness of the party (let the current happiness be 0).
A handshake will be performed as follows:

Takahashi chooses one (ordinary) guest x for his left hand and another guest y for his right hand (x and y can be the same).

Then, he shakes the left hand of Guest x and the right hand of Guest y simultaneously to increase the happiness by A_x+A_y.

However, Takahashi should not perform the same handshake more than once. Formally, the following condition must hold:

Assume that, in the k-th handshake, Takahashi shakes the left hand of Guest x_k and the right hand of Guest y_k. Then, there is no pair p, q (1 \leq p < q \leq M) such that (x_p,y_p)=(x_q,y_q).

What is the maximum possible happiness after M handshakes?

Constraints

1 \leq N \leq 10^5

1 \leq M \leq N^2

1 \leq A_i \leq 10^5

All values in input are integers.

Input

Input is given from Standard Input in the following format:

N M
A_1 A_2 ... A_N

Output

Print the maximum possible happiness after M handshakes.

Sample Input 1

5 3
10 14 19 34 33

Sample Output 1

202

Let us say that Takahashi performs the following handshakes:

In the first handshake, Takahashi shakes the left hand of Guest 4 and the right hand of Guest 4.

In the second handshake, Takahashi shakes the left hand of Guest 4 and the right hand of Guest 5.

In the third handshake, Takahashi shakes the left hand of Guest 5 and the right hand of Guest 4.

Then, we will have the happiness of (34+34)+(34+33)+(33+34)=202.

We cannot achieve the happiness of 203 or greater, so the answer is 202.

Sample Input 2

9 14
1 3 5 110 24 21 34 5 3

Sample Output 2

1837

Sample Input 3

9 73
67597 52981 5828 66249 75177 64141 40773 79105 16076

Sample Output 3

8128170

Solution in C (GCC 9.2.1) (judge verdict: Wrong Answer)

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<stdint.h>
#include<tgmath.h>
#include<stdbool.h>
#include<sys/queue.h>
#include<time.h>
#define ll long long
#define min(a, b) ((a) > (b) ? (b) : (a))
#define max(a, b) ((a) > (b) ? (a) : (b))
int llup(const void *a, const void *b){return*(ll*)a>*(ll*)b?1:-1;}
int lldown(const void *a, const void *b){return *(ll*)a>*(ll*)b?-1:1;}

#define N (1<<23)
const ll mod = 998244353ll;
ll modpow(ll x, ll y, ll m){
    if(y == 0ll)return 1ll;
    ll res = 1ll, tmp = x;
    while(y){
        if(y&1) res = res * tmp % m;
        tmp = tmp * tmp % m;
        y >>= 1;
    }
    return res;
}
ll pom(ll x, ll y){return modpow(x, y, mod);}
void dft(ll f[], int n){
	if(n == 1)return;
	ll f0[n/2], f1[n/2];
	for(int i=0; i<n/2; i++){
		f0[i] = f[2*i + 0];
		f1[i] = f[2*i + 1];
	}
	dft(f0, n/2);
	dft(f1, n/2);
	ll zeta = pom(15311432, N / n), pow_zeta = 1ll;//3^119 == 15311432 (mod 998244353)
	for(int i=0; i<n; i++){
		f[i] = (f0[i % (n/2)] + pow_zeta * f1[i % (n/2)]) % mod;
		pow_zeta = (pow_zeta * zeta) % mod;
	}
	return;
}
void idft(ll f[], int n){
	if(n == 1)return;
	ll f0[n/2], f1[n/2];
	for(int i=0; i<n/2; i++){
		f0[i] = f[2*i + 0];
		f1[i] = f[2*i + 1];
	}
	idft(f0, n/2);
	idft(f1, n/2);
	ll zeta = pom(469870224, N / n), pow_zeta = 1ll;//(3^119)^(998244353-2) == 469870224 (mod 998244353)
	for(int i=0; i<n; i++){
		f[i] = (f0[i % (n/2)] + pow_zeta * f1[i % (n/2)]) % mod;
		pow_zeta = (pow_zeta * zeta) % mod;
	}
	return;
}

int main(){
	int M = 1<<18;
	int n;
	ll m;
	scanf("%d%lld", &n, &m);
	ll a[M];
	for(int i=0; i<M; i++)a[i] = 0;
	for(int i=0; i<n; i++){
		int j;
		scanf("%d", &j);
		a[j]++;
	}
	dft(a, M);
	for(int i=0; i<M; i++)a[i] = (a[i] * a[i]) % mod;
	idft(a, M);
	ll Minv = pom(M, mod - 2);
	for(int i=0; i<M; i++)a[i] = (a[i] * Minv) % mod;
	ll ans = 0;
	int i = M - 1;
	while(m){
		ll tmp = min(m, a[i]);
		if(tmp > 0){
			ans += tmp * i;
			m -= tmp;
		}
		i--;
	}
	printf("%lld\n", ans);
	return 0;
}