#include <stdio.h>
#include <stdlib.h>
//dfs需要的一些全局变量
long long S = 0;//所选元素和,初始化为0
int res = 0;//最终的最大值,初始化为0
//构建自己的dfs算法
void dfs(int *a, int n, int m, int start){
//已经扫描完了整个数组,终止递归,返回
if(start >= n){
return;
}
//选择当前元素加入序列,并判断是否要更新res值
S += a[start];
int tmp = S % m;
if(tmp > res){
res = tmp;
}
//选择当前元素后递归进行下一个元素的判断
dfs(a, n, m, start + 1);
//撤销选择,不选择当前元素后递归进行下一个元素的判断
S -= a[start];
dfs(a, n, m, start + 1);
}
int main() {
//读取数据
int n, m;
scanf("%d %d\n", &n, &m);
int *a = (int *)malloc(sizeof(int) * n);
for(int i = 0; i < n; i++){
scanf("%d ", a + i);
}
//从第一个元素开始递归搜索
dfs(a, n, m, 0);
//打印结果
printf("%d\n", res);
//释放空间
free(a);
return 0;
}