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)
}