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 <bits/stdc++.h>
#define rep(i, n) for(int i = 0; i < (n); i++)
#define all(a) a.begin(), a.end()
template<class T> inline bool chmax(T& a, T b) { if (a < b) { a = b; return 1; } return 0; }
template<class T> inline bool chmin(T& a, T b) { if (a > b) { a = b; return 1; } return 0; }
using namespace std;
typedef long long ll;

int main(){

    int n, m;
    cin >> n >> m;

    vector<int> x(n);
    rep(i, n)cin >> x[i];

    x.push_back(133333);
    sort(all(x));

    vector<vector<int>> counts(m);
    int cnt = 0;
    rep(i, n){
        cnt++;
        if(x[i] < x[i + 1]){
            counts[x[i] % m].push_back(cnt);
            cnt = 0;
        }
    }

    auto getsum = [&](int i){
        int res = 0;
        for(int x : counts[i])res += x;
        return res;
    };

    auto oddcount = [&](int i){
        int res = 0;
        for(int x : counts[i])if(x % 2 == 1)res++;
        return res;
    };
    
    auto getsum_odd = [&](int i){
        int res = 0;
        for(int x : counts[i])res += x / 2;
        return res;
    };

    int ans = 0;
    rep(i, m / 2 + 1){
        if(i == 0 or i * 2 == m){
            ans += getsum(i) / 2;
        } else {
            int l = i, r = m - i;
            int lsum = getsum(l), rsum = getsum(r);
            if(lsum < rsum)swap(l, r), swap(lsum, rsum);
            int lodd = oddcount(l), lsumodd = getsum_odd(l);
            if(rsum <= lodd)ans += lsumodd + rsum;
            else ans += (lsum + rsum) / 2;
        }
    }

    cout << ans << endl;
    return 0;

}