#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> P;
typedef pair<int,P> P1;
typedef pair<P,P> P2;
#define pu push
#define pb push_back
#define mp make_pair
#define eps 1e-7
#define INF 1000000000
#define mod 1000000007
#define fi first
#define sc second
#define rep(i,x) for(int i=0;i<x;i++)
#define repn(i,x) for(int i=1;i<=x;i++)
#define SORT(x) sort(x.begin(),x.end())
#define ERASE(x) x.erase(unique(x.begin(),x.end()),x.end())
#define POSL(x,v) (lower_bound(x.begin(),x.end(),v)-x.begin())
#define POSU(x,v) (upper_bound(x.begin(),x.end(),v)-x.begin())
int n,m,a[100005],cnt[100005],cnt2[100005],gen[100005],ans;
int main(){
	cin>>n>>m;
	rep(i,n){
		cin>>a[i];
		cnt[a[i]%m]++;
		cnt2[a[i]]++;
	}
	for(int i=0;i<=100000;i++){
		if(cnt2[i] >= 2){
			gen[i%m] += cnt2[i]/2;
		}
	}
	for(int i=0;i<=m/2;i++){
		int x = cnt[i];
		int y = cnt[(m-i)%m];
		if(i == (m-i)%m){
			ans += x/2;
		}
		else{
			if(x == y){
				ans += x;
			}
			else if(x > y){
				if(x-gen[i]*2 <= y){
					ans += (x+y)/2;
				}
				else{
					ans += gen[i] + y;
				}
			}
			else{
				if(y-gen[(m-i)%m]*2 <= x){
					ans += (x+y)/2;
				}
				else{
					ans += gen[(m-i)%m] + x;
				}
			}
		}
	}
	cout<<ans<<endl;
}
### Prompt

Develop a solution in Cpp to the problem described below:

Takahashi is playing with N cards.

The i-th card has an integer X_i on it.

Takahashi is trying to create as many pairs of cards as possible satisfying one of the following conditions:

* The integers on the two cards are the same.
* The sum of the integers on the two cards is a multiple of M.



Find the maximum number of pairs that can be created.

Note that a card cannot be used in more than one pair.

Constraints

* 2≦N≦10^5
* 1≦M≦10^5
* 1≦X_i≦10^5

Input

The input is given from Standard Input in the following format:


N M
X_1 X_2 ... X_N


Output

Print the maximum number of pairs that can be created.

Examples

Input

7 5
3 1 4 1 5 9 2


Output

3


Input

15 10
1 5 6 10 11 11 11 20 21 25 25 26 99 99 99


Output

6

### Response

```cpp
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> P;
typedef pair<int,P> P1;
typedef pair<P,P> P2;
#define pu push
#define pb push_back
#define mp make_pair
#define eps 1e-7
#define INF 1000000000
#define mod 1000000007
#define fi first
#define sc second
#define rep(i,x) for(int i=0;i<x;i++)
#define repn(i,x) for(int i=1;i<=x;i++)
#define SORT(x) sort(x.begin(),x.end())
#define ERASE(x) x.erase(unique(x.begin(),x.end()),x.end())
#define POSL(x,v) (lower_bound(x.begin(),x.end(),v)-x.begin())
#define POSU(x,v) (upper_bound(x.begin(),x.end(),v)-x.begin())
int n,m,a[100005],cnt[100005],cnt2[100005],gen[100005],ans;
int main(){
	cin>>n>>m;
	rep(i,n){
		cin>>a[i];
		cnt[a[i]%m]++;
		cnt2[a[i]]++;
	}
	for(int i=0;i<=100000;i++){
		if(cnt2[i] >= 2){
			gen[i%m] += cnt2[i]/2;
		}
	}
	for(int i=0;i<=m/2;i++){
		int x = cnt[i];
		int y = cnt[(m-i)%m];
		if(i == (m-i)%m){
			ans += x/2;
		}
		else{
			if(x == y){
				ans += x;
			}
			else if(x > y){
				if(x-gen[i]*2 <= y){
					ans += (x+y)/2;
				}
				else{
					ans += gen[i] + y;
				}
			}
			else{
				if(y-gen[(m-i)%m]*2 <= x){
					ans += (x+y)/2;
				}
				else{
					ans += gen[(m-i)%m] + x;
				}
			}
		}
	}
	cout<<ans<<endl;
}
```