← Home
package main

import (
	"bufio"
	"fmt"
	"os"
	"sort"
)

type int64Slice []int64

func (a int64Slice) Len() int           { return len(a) }
func (a int64Slice) Swap(i, j int)      { a[i], a[j] = a[j], a[i] }
func (a int64Slice) Less(i, j int) bool { return a[i] < a[j] }

func readInt(reader *bufio.Reader) int64 {
	var res int64
	var sign int64 = 1
	for {
		b, err := reader.ReadByte()
		if err != nil {
			return res * sign
		}
		if b == '-' {
			sign = -1
			continue
		}
		if b >= '0' && b <= '9' {
			res = res*10 + int64(b-'0')
			for {
				b, err := reader.ReadByte()
				if err != nil || b < '0' || b > '9' {
					return res * sign
				}
				res = res*10 + int64(b-'0')
			}
		}
	}
}

func main() {
	reader := bufio.NewReader(os.Stdin)
	n := int(readInt(reader))
	p := readInt(reader)
	k := readInt(reader)

	vals := make(int64Slice, n)
	for i := 0; i < n; i++ {
		a := readInt(reader)
		v := (a * a) % p
		v = (v * v) % p
		sub := (k * a) % p
		vals[i] = (v - sub + p) % p
	}

	sort.Sort(vals)

	var ans int64
	var count int64 = 1
	for i := 1; i < n; i++ {
		if vals[i] == vals[i-1] {
			count++
		} else {
			ans += count * (count - 1) / 2
			count = 1
		}
	}
	ans += count * (count - 1) / 2

	fmt.Println(ans)
}