Scanner scanner=new Scanner(System.in);
int n=scanner.nextInt(),k=scanner.nextInt();
int N=110;
int[][] f=new int[N][N];//表示从前i个物品选,且总和%k的数是j的所有方案,属性是存总和最大值
for(int i=0;i<n;i++) {//初始化为最小值,表示没有方案或者还没算到
for(int j=0;j<k;j++)
f[i][j]=-0x3f3f3f3f;
}
f[0][0]=0;//只有这个才有意义,f[0][i]没有选法可选
for(int i=1;i<=n;i++) {//最好从下标1开始,因为表达式里有用到i-1
int w=scanner.nextInt();
for(int j=0;j<k;j++) {
//选与不选
f[i][j]=Math.max(f[i-1][j], f[i-1][(j+k-w%k)%k]+w);//(j+k-w%k)%k正的还是正,负的变为正的
}
}
System.out.println(f[n][0]);//要k的整数倍