| 记录编号 | 22515 | 评测结果 | AAAAAAAAAA | 
    
        | 题目名称 | 516.求和 | 最终得分 | 100 | 
    
        | 用户昵称 |  苏轼 | 是否通过 | 通过 | 
    
        | 代码语言 | Pascal | 运行时间 | 0.539 s | 
    
        | 提交时间 | 2010-11-19 15:12:25 | 内存使用 | 0.49 MiB | 
    
    
    
    		显示代码纯文本
		
		program suma(input,output);
type
  t_list=array[0..100000]of longint;
var
  i,j,a,b,n,k,p,ans,t:longint;
  sum:t_list;
procedure sort(const l,r: longint);
  var
    i,j,x,y: longint;
  begin
    i:=l;
    j:=r;
    x:=sum[(l+r) div 2];
    repeat
      while sum[i]<x do
        inc(i);
      while x<sum[j] do
        dec(j);
      if not(i>j) then
      begin
        y:=sum[i];
        sum[i]:=sum[j];
        sum[j]:=y;
        inc(i);
        dec(j);
      end;
    until i>j;
    if l<j then
      sort(l,j);
    if i<r then
      sort(i,r);
  end;
begin
  assign(input,'suma.in');
  reset(input);
  assign(output,'suma.out');
  rewrite(output);
  readln(n,k,p);
  for i:=1 to n do
  begin
    readln(a);
    sum[i]:=(sum[i-1]+a)mod p;
  end;
  sort(1,n);
  ans:=maxlongint;
  sum[0]:=-maxlongint div 100;
  sum[n+1]:=sum[0];
  if n>2500 then
    n:=2500;
  for i:=1 to n do
  begin
    j:=i-1;
    while sum[i]-sum[j]<k do
      dec(j);
    if sum[i]-sum[j]<ans then
      ans:=sum[i]-sum[j];
  end;
  writeln(ans);
  close(input);
  close(output);
end.