Problem:
Score : 700 points

Problem Statement

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.

Sample Input 1

7 5
3 1 4 1 5 9 2

Sample Output 1

3

Three pairs (3,2), (1,4) and (1,9) can be created.

It is possible to create pairs (3,2) and (1,1), but the number of pairs is not maximized with this.

Sample Input 2

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

Sample Output 2

6

Solution in OCaml (4.02.3) (judge verdict: Wrong Answer)

Scanf.scanf "%d %d" (fun n m ->
    let hist = Array.make 100001 0 in
    let modgrp = Array.make m 0 in
    for i = 1 to n do
        Scanf.scanf " %d" (fun x ->
            hist.(x) <- hist.(x) + 1;
            modgrp.(x mod m) <- modgrp.(x mod m) + 1;
        )
    done;
    let calc1 i = modgrp.(i) / 2 in
    let calc2 i j =
        let i, j = if modgrp.(i) <= modgrp.(j) then i, j else j, i in
        let rest = modgrp.(j) - modgrp.(i) in

        let rec loop k acc =
            if k > 100000 then acc else
                let acc = acc + hist.(k) / 2 in
                if acc >= rest then rest else loop (k + m) acc
        in
        let acc1 = loop j 0 in
        acc1 + modgrp.(i)
    in
    let rec loop i acc =
        if i * 2 > m then acc else
            let acc = if i = 0 || i * 2 = m then acc + calc1 i
                                            else acc + calc2 i (m - i)
            in
            loop (i + 1) acc
    in
    loop 0 0 |> Printf.printf "%d\n"
)