[//]: # Python
n,k=map(int,input().split())
N=110
# 从前i个物品中选,且总和除以k的余数是j的所有方案
f=[[ 0 for _ in range(N)] for _ in range(N)] # 第一维为取的个数,第二维是总和模k的余数j
# 当没有物品时,总和一定是0,只有f[0][0]有意义,f[0][1],f[0][2]没有意义
f[0][0]=0 # 糖果总数为0
# 需要把非法方案置为负无穷
for z in range(1,N):
f[0][z]=-1e20
for i in range(1,n+1): # 从1到n个物品中选
w=int(input()) # 第i个物品的值
for j in range(k):
f[i][j]=max(f[i-1][j],f[i-1][(j-w)%k]+w)
print(f[n][0]) # 从前n个物品中选,模k余0```
----------
### 算法1
##### (暴力枚举) $O(n^2)$
blablabla
#### 时间复杂度
#### 参考文献
#### C++ 代码
blablabla
----------
### 算法2
##### (暴力枚举) $O(n^2)$
blablabla
#### 时间复杂度
#### 参考文献
#### C++ 代码
blablabla
```