Problem:
Score : 200 points

Problem Statement

Snuke has N sticks.
The length of the i-th stick is l_i.

Snuke is making a snake toy by joining K of the sticks together.

The length of the toy is represented by the sum of the individual sticks that compose it.
Find the maximum possible length of the toy.

Constraints

1 \leq K \leq N \leq 50

1 \leq l_i \leq 50

l_i is an integer.

Input

Input is given from Standard Input in the following format:

N K
l_1 l_2 l_3 ... l_{N}

Output

Print the answer.

Sample Input 1

5 3
1 2 3 4 5

Sample Output 1

12

You can make a toy of length 12 by joining the sticks of lengths 3, 4 and 5, which is the maximum possible length.

Sample Input 2

15 14
50 26 27 21 41 7 42 35 7 5 5 36 39 1 45

Sample Output 2

386

Solution in C (GCC 5.4.1) (judge verdict: Accepted)

#include<stdio.h>
int number1[100],number2[100],number3[100];
int merge_it(int l,int m,int r)
{
    int i=0,j=0,k=0,in1=0,in2=0,index=l;
    for(i=l;i<=m;i++)number2[j++]=number1[i];
    for(;i<=r;i++)number3[k++]=number1[i];
    while(in1<j && in2<k)
    {
        if(number2[in1]>number3[in2])number1[index++]=number2[in1++];
        else number1[index++]=number3[in2++];
    }
    if(in1<j)
    {
        while(in1<j)
        {
            number1[index++]=number2[in1++];
        }
    }
    else
    {
        while(in2<k)
        {
            number1[index++]=number3[in2++];
        }
    }
    return 0;
}
int merge(int lower,int highest)
{
    int mid;
    if(lower==highest)return 0;
    else
    {
        mid=(lower+highest)/2;
        merge(lower,mid);
        merge(mid+1,highest);
        merge_it(lower,mid,highest);
    }
}
int main()
{
    int n,m;
    while(scanf("%d %d",&n,&m)==2)
    {
        int sum=0,i;
        for(i=0;i<n;i++)scanf("%d",&number1[i]);
        merge(0,n-1);
        for(i=0;i<m;i++)sum+=number1[i];
        printf("%d\n",sum);

    }
    return 0;
}