#include <bits/stdc++.h>
using namespace std;
set<int> a[100005][2];
int f[100005];
int main() {
  int n, m, x;
  scanf("%d %d", &n, &m);
  for (int i = 0; i < n; i++) {
    scanf("%d", &x);
    f[x]++;
  }
  queue<int> q;
  for (int i = 1; i <= 100000; i++) {
    if (f[i] == 0) continue;
    a[i % m][f[i] % 2].insert(i);
    if (f[i] % 2 == 1) {
      q.push(i);
    }
  }
  int ans = 0;
  while (!q.empty()) {
    int x = q.front();
    q.pop();
    if (f[x] % 2 == 0) continue;
    a[x % m][1].erase(x);
    f[x]--;
    if (f[x]) {
      a[x % m][0].insert(x);
    }
    int other = (m - x % m) % m;
    if (!a[other][1].empty()) {
      int y = *(a[other][1].begin());
      a[other][1].erase(y);
      f[y]--;
      if (f[y]) {
        a[other][0].insert(y);
      }
      ans++;
      //printf("%d %d\n", x, y);
    } else if (!a[other][0].empty()) {
      int y = *(a[other][0].begin());
      a[other][0].erase(y);
      f[y]--;
      ans++;
      a[other][1].insert(y);
      q.push(y);
      //printf("%d %d\n", x, y);
    }
  }
  for (int i = 1; i <= 100000; i++) {
    ans += f[i] / 2;
  }
  printf("%d\n", ans);
  return 0;
}
### Prompt

Your challenge is to write a Cpp solution to the following problem:

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;
set<int> a[100005][2];
int f[100005];
int main() {
  int n, m, x;
  scanf("%d %d", &n, &m);
  for (int i = 0; i < n; i++) {
    scanf("%d", &x);
    f[x]++;
  }
  queue<int> q;
  for (int i = 1; i <= 100000; i++) {
    if (f[i] == 0) continue;
    a[i % m][f[i] % 2].insert(i);
    if (f[i] % 2 == 1) {
      q.push(i);
    }
  }
  int ans = 0;
  while (!q.empty()) {
    int x = q.front();
    q.pop();
    if (f[x] % 2 == 0) continue;
    a[x % m][1].erase(x);
    f[x]--;
    if (f[x]) {
      a[x % m][0].insert(x);
    }
    int other = (m - x % m) % m;
    if (!a[other][1].empty()) {
      int y = *(a[other][1].begin());
      a[other][1].erase(y);
      f[y]--;
      if (f[y]) {
        a[other][0].insert(y);
      }
      ans++;
      //printf("%d %d\n", x, y);
    } else if (!a[other][0].empty()) {
      int y = *(a[other][0].begin());
      a[other][0].erase(y);
      f[y]--;
      ans++;
      a[other][1].insert(y);
      q.push(y);
      //printf("%d %d\n", x, y);
    }
  }
  for (int i = 1; i <= 100000; i++) {
    ans += f[i] / 2;
  }
  printf("%d\n", ans);
  return 0;
}
```