#include<iostream>
using namespace std;

//将打水时间从小到大排序 
void maopao(int a[],int n){
	bool ok;
	//进行N-1轮排序 
	for(int i=n-1;i>=1;i--){
		
		ok=true;//假设没有交换
		 
		//每轮进行i次排序
		for(int j=0;j<i;j++){
			//大的数往下沉 
			if(a[j]>a[j+1]){
				//相互交换 C++自带函数 
				swap(a[j],a[j+1]);
				ok=false;//一旦发生过交换,标志设置成false,说明需要下一轮 
			}
		} 
		
		//如果此轮没有发生过交换,说明数组已经排序完成
		//无需下一轮比较跳出循环
		if(ok==true)
			break; 
	}
	
}
 
int main(){
	
	int n;//打水的人数
	int r;//水龙头的个数
	int a[510];//每个人的打水时间 
	int b[510];//每个人真正打水的时间= 打水时间+等待时间 
	cin>>n>>r;
	
	int sum=0;//所有人所用打水时间 
	 
	//输入每个人的打水时间 
	for(int i=0;i<n;i++){
		cin>>a[i];
	}
	
	//对打水时间进行由小到大排序
	 maopao(a,n);
	 
	 //实体水龙头r个,前r个人无需等待,直接保存前r个人的打水时间 
	for(int i = 0; i < r; i++)    
    {    
        b[i] = a[i];    
    }    

	//虚拟水龙头n-r个, 等于其等待时间,i - r 相当于从第1个水龙头顺序排下来 
	for(int i = r; i < n; i++)    
    {    
        b[i] = b[i - r] + a[i];    
    }    
	
	//统计所有人打水时间 
	for(int i = 0; i < n; i++)    
    {    
        sum += b[i];    
    }   
	
	cout<<sum<<endl; 
}
/**************************************************************
	Problem: 1228
	User: admin
	Language: C++
	Result: Accepted
	Time:9 ms
	Memory:2072 kb
****************************************************************/