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

#include <iostream>
#include <string.h>
#include <set>
#include <map>
#include <unordered_map>
#include <vector>

using namespace std;

#define pb push_back
#define mp make_pair
#define ll long long
#define ull unsigned ll
#define db double
#define INF 0x3f3f3f3f
#define MOD 1000000007
#define PII pair<int, int>

int n,m,x;
unordered_map<int,int> cnt;
multiset<int> sp;
multiset<int> alone;
vector<int> v;

int main() {
    scanf("%d%d",&n,&m);
    for (int i=0;i<n;i++) {
        scanf("%d",&x);
        if (++cnt[x]==2) {
            cnt[x]=0;
            sp.insert(x%m);

        }
    }
    for (auto& entry : cnt) {
        if (entry.second>0) v.pb(entry.first%m);
    }
    for (int i=0;i<v.size();i++) {
        alone.insert(v[i]);
    }
    int cnt=sp.size();
    for (int i=0;i<v.size();i++) {
        auto iter=alone.find(v[i]);
        if (iter!=alone.end()) {
            int val=v[i];
            alone.erase(iter);
            auto iter1=alone.find((m-val)%m);
            bool found=false;
            if (iter1!=alone.end()) {
                cnt++;
                alone.erase(iter1);
                found=true;
            }
            if (!found) {
                auto iter2=sp.find((m-val)%m);
                iter1=alone.find(val);
                if (iter2!=sp.end()&&iter1!=alone.end()) {
                    cnt++;
                    sp.erase(iter2);
                    alone.erase(iter1);
                }
            }
        }
    }
    printf("%d\n",cnt);
}