简简单单 暴力解决
include [HTML_REMOVED]
include[HTML_REMOVED]
using namespace std;
define inf 0x3f3f3f3f
typedef long long ll;
typedef pair[HTML_REMOVED] P;
define pi 3.141592653589793238
int mov[4][2]= {{-1,0},{0,1},{1,0},{0,-1}};
int month[13]= {0,31,0,31,30,31,30,31,31,30,31,30,31};
const int N=101000;
const int Mod=1e9+7;
int arr[N];
int mod[3010][4];
int arr2[N];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int n,k;
while(cin>>n>>k){
for(int i=0;i<k;i++){
mod[i][0]=0;
}
for(int i=0;i<n;i++){
cin>>arr[i];
int m=arr[i]%k;
if(mod[m][0]==0){
mod[m][1]=arr[i];
mod[m][0]=1;
}else if(mod[m][0]==1){
if(mod[m][1]<=arr[i]){
mod[m][2]=mod[m][1];
mod[m][1]=arr[i];
}else{
mod[m][2]=arr[i];
}
mod[m][0]=2;
}else if(mod[m][0]==2){
if(mod[m][1]<=arr[i]){
mod[m][3]=mod[m][2];
mod[m][2]=mod[m][1];
mod[m][1]=arr[i];
}else{
if(mod[m][2]<=arr[i]){
mod[m][3]=mod[m][2];
mod[m][2]=arr[i];
}else{
mod[m][3]=arr[i];
}
}
mod[m][0]=3;
}else if(mod[m][0]==3){
if(mod[m][1]<=arr[i]){
mod[m][3]=mod[m][2];
mod[m][2]=mod[m][1];
mod[m][1]=arr[i];
}else{
if(mod[m][2]<=arr[i]){
mod[m][3]=mod[m][2];
mod[m][2]=arr[i];
}else if(mod[m][3]<arr[i]){
mod[m][3]=arr[i];
}
}
}
}
int cnt=0;
for(int i=0;i<k;i++){
for(int j=1;j<=mod[i][0];j++){
arr2[cnt++]=mod[i][j];
}
}
sort(arr2,arr2+cnt);
int res=0;
for(int i=cnt-1;i>=0;i--){
for(int j=i-1;j>=0;j--){
int m=k-(arr2[i]+arr2[j])%k;
if(m==k){
m=0;
}
if(mod[m][0]>0){
if(mod[m][1]==arr2[i]||mod[m][1]==arr2[j]){
if(mod[m][1]==arr2[i]){
if(mod[m][0]>1){
if(mod[m][2]==arr2[j]){
if(mod[m][0]==3){
res=max(res,arr2[i]+arr2[j]+mod[m][3]);
}
}else{
res=max(res,arr2[i]+arr2[j]+mod[m][2]);
}
}
}else if(mod[m][1]==arr2[j]){
if(mod[m][0]>1){
if(mod[m][2]==arr2[i]){
if(mod[m][0]==3){
res=max(res,arr2[i]+arr2[j]+mod[m][3]);
}
}else{
res=max(res,arr2[i]+arr2[j]+mod[m][2]);
}
}
}
}else{
res=max(res,arr2[i]+arr2[j]+mod[m][1]);
}
}
}
}
cout<<res<<endl;
}
return 0;
}