#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int inf=0x3f3f3f3f;
int main()
{
int n,p;
cin>>n>>p;
long a[n+1],dp[n+1],point[n+1];
memset(dp,0,sizeof(dp));
memset(point,0,sizeof(point));
dp[0]=point[0]=-inf;
for(int i=1;i<=n;i++)
{
scanf("%ld",&a[i]);
if(dp[i-1]>0)
{
if(a[i]>=0) dp[i]=(dp[i-1]%p+a[i]%p)%p;
else dp[i]=dp[i-1]%p;
}
else
{
if(a[i]>=dp[i-1]) dp[i]=a[i]%p;
else dp[i]=dp[i-1]%p;
}
//cout<<dp[i]<<" ";
}
//cout<<endl;
long ans=dp[1],maxi=dp[1]+dp[1];
point[1]=dp[1];
for(int i=2;i<=n;i++)
{
maxi=max(maxi,point[i-1]+dp[i-1]);
point[i]=maxi;
ans=max(point[i],ans);
//cout<<point[i]<<" ";
}
//cout<<endl;
cout<<ans<<endl;
return 0;
}