← Home
```go
package main

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

const MOD int64 = 998244353
const OFF = 200
const SZ = 401

func powmod(a, e int64) int64 {
	r := int64(1)
	for e > 0 {
		if e&1 == 1 {
			r = r * a % MOD
		}
		a = a * a % MOD
		e >>= 1
	}
	return r
}

func main() {
	in := bufio.NewReaderSize(os.Stdin, 1<<20)
	out := bufio.NewWriterSize(os.Stdout, 1<<20)
	defer out.Flush()

	var n, a, b int
	fmt.Fscan(in, &n, &a, &b)

	inv1e6 := powmod(1000000, MOD-2)

	xUsed := make([]bool, 101)
	yUsed := make([]bool, 101)
	dUsed := make([]bool, SZ)
	sUsed := make([]bool, SZ)
	failD := make([]int64, SZ)
	failS := make([]int64, SZ)
	for i := 0; i < SZ; i++ {
		failD[i] = 1
		failS[i] = 1
	}

	xCnt, yCnt := 0, 0

	for i := 0; i < n; i++ {
		var x, y, pp int
		fmt.Fscan(in, &x, &y, &pp)

		if !xUsed[x] {
			xUsed[x] = true
			xCnt++
		}
		if !yUsed[y] {
			yUsed[y] = true
			yCnt++
		}

		p := int64(pp) * inv1e6 % MOD
		comp := (1 - p + MOD) % MOD

		di := x - y + OFF
		si := x + y + OFF

		dUsed[di] = true
		sUsed[si] = true
		failD[di] = failD[di] * comp % MOD
		failS[si] = failS[si] * comp % MOD
	}

	qD := make([]int64, SZ)
	qS := make([]int64, SZ)

	ans := int64(1+xCnt+yCnt) % MOD

	for i := 0; i < SZ; i++ {
		if dUsed[i] {
			qD[i] = (1 - failD[i] + MOD) % MOD
			ans += qD[i]
		}
		if sUsed[i] {
			qS[i] = (1 - failS[i] + MOD) % MOD
			ans += qS[i]
		}
	}
	ans %= MOD

	for x := 1; x < a; x++ {
		for y := 1; y < b; y++ {
			c := 0
			if xUsed[x] {
				c++
			}
			if yUsed[y] {
				c++
			}

			di := x - y + OFF
			si := x + y + OFF

			hasP := dUsed[di]
			hasM := sUsed[si]

			if c > 0 {
				ans += int64(c - 1)
				if hasP {
					ans += qD[di]
				}
				if hasM {
					ans += qS[si]
				}
			} else if hasP && hasM {
				ans += qD[di] * qS[si] % MOD
			}

			ans %= MOD
		}
	}

	for u := 1; u < 2*a; u += 2 {
		for v := 1; v < 2*b; v += 2 {
			di := (u-v)/2 + OFF
			si := (u+v)/2 + OFF
			if dUsed[di] && sUsed[si] {
				ans += qD[di] * qS[si] % MOD
				ans %= MOD
			}
		}
	}

	fmt.Fprintln(out, ans%MOD)
}
```