// Manual Sort (compatible with all Free Pascal versions)
program MaxKSum;
procedure QuickSort(var A: array of Integer; L, R: Integer);
var
i, j, pivot, temp: Integer;
begin
i := L;
j := R;
pivot := A[(L + R) div 2];
repeat
while A[i] > pivot do Inc(i); // descending
while A[j] < pivot do Dec(j);
if i <= j then
begin
temp := A[i];
A[i] := A[j];
A[j] := temp;
Inc(i);
Dec(j);
end;
until i > j;
if L < j then QuickSort(A, L, j);
if i < R then QuickSort(A, i, R);
end;
function MaxSumK(var arr: array of Integer; k: Integer): Integer;
var
i: Integer;
begin
QuickSort(arr, Low(arr), High(arr));
MaxSumK := 0;
for i := 0 to k - 1 do
MaxSumK := MaxSumK + arr[i];
end;
var
arr: array of Integer;
begin
arr := [11, 2, 4, 9, 3, 6, 5, 1];
WriteLn('Maximum sum = ', MaxSumK(arr, 3));
end.
(*
run:
Maximum sum = 26
*)