우선 세준이의 위치는 0이고 책들 또한 0에 위치하기 때문에 음수 좌표에 갔다가 양수 좌표로 가는 것은 동선의 낭비이다. 그렇기 때문에 책들의 제자리를 입력 받은 뒤에 이를 음수 좌표와 양수 좌표의 배열로 나눠서 따로 저장하고, 음수 좌표와 양수 좌표를 절대값이 큰 순으로 정렬한 뒤에 각 배열의 가장 앞에서부터 m칸씩 이동하며 거리를 저장하는 배열에 원소를 넣어준다. 음수, 양수 좌표 배열의 길이가 m으로 나눠떨어지지 않을 경우 순회하지 않은 원소 중 가장 앞에 있는 원소를 거리 배열에 넣어주어 이 중 가장 큰 수는 한번만 더하고 나머지는 두번씩 더하여 해결하였다.
n, m=map(int, input().split())
location=list(map(int, input().split()))
positive=[]
negative=[]
distance=[]
for i in location:
if i>0:
positive.append(i)
else:
negative.append(i)
positive.sort(reverse=True)
negative.sort()
for i in range(len(positive)//m):
distance.append(positive[m*i])
if len(positive)%m>0:
distance.append(positive[(len(positive)//m)*m])
for i in range(len(negative)//m):
distance.append(abs(negative[m*i]))
if len(negative)%m>0:
distance.append(abs(negative[(len(negative)//m)*m]))
distance.sort()
answer=distance.pop()
answer+=2*sum(distance)
print(answer)