Problem:
Score : 200 points

Problem Statement

There is a rectangle in the xy-plane, with its lower left corner at (0, 0) and its upper right corner at (W, H). Each of its sides is parallel to the x-axis or y-axis. Initially, the whole region within the rectangle is painted white.

Snuke plotted N points into the rectangle. The coordinate of the i-th (1 ≦ i ≦ N) point was (x_i, y_i).

Then, he created an integer sequence a of length N, and for each 1 ≦ i ≦ N, he painted some region within the rectangle black, as follows:

If a_i = 1, he painted the region satisfying x < x_i within the rectangle.

If a_i = 2, he painted the region satisfying x > x_i within the rectangle.

If a_i = 3, he painted the region satisfying y < y_i within the rectangle.

If a_i = 4, he painted the region satisfying y > y_i within the rectangle.

Find the area of the white region within the rectangle after he finished painting.

Constraints

1 ≦ W, H ≦ 100

1 ≦ N ≦ 100

0 ≦ x_i ≦ W (1 ≦ i ≦ N)

0 ≦ y_i ≦ H (1 ≦ i ≦ N)

W, H (21:32, added), x_i and y_i are integers.

a_i (1 ≦ i ≦ N) is 1, 2, 3 or 4.

Input

The input is given from Standard Input in the following format:

W H N
x_1 y_1 a_1
x_2 y_2 a_2
:
x_N y_N a_N

Output

Print the area of the white region within the rectangle after Snuke finished painting.

Sample Input 1

5 4 2
2 1 1
3 3 4

Sample Output 1

9

The figure below shows the rectangle before Snuke starts painting.

First, as (x_1, y_1) = (2, 1) and a_1 = 1, he paints the region satisfying x < 2 within the rectangle:

Then, as (x_2, y_2) = (3, 3) and a_2 = 4, he paints the region satisfying y > 3 within the rectangle:

Now, the area of the white region within the rectangle is 9.

Sample Input 2

5 4 3
2 1 1
3 3 4
1 4 2

Sample Output 2

0

It is possible that the whole region within the rectangle is painted black.

Sample Input 3

10 10 5
1 6 1
4 1 3
6 9 4
9 4 2
3 1 3

Sample Output 3

64

Solution in C# (Mono 4.6.2.0) (judge verdict: Accepted)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
class Program
{
    static void Main(string[] args)
    {
            // 入力
            string[] sS = Console.ReadLine().Trim().Split(' ');
            int iW = int.Parse(sS[0]);
            int iH = int.Parse(sS[1]);
            int iN = int.Parse(sS[2]);
            List<ClsSmp> lstInp = new List<ClsSmp>();
            for (int i = 0; i < iN; i++)
            {
                sS = Console.ReadLine().Trim().Split(' ');
                ClsSmp oneUsr = new ClsSmp();
                oneUsr.iX = int.Parse(sS[0]);
                oneUsr.iY = int.Parse(sS[1]);
                oneUsr.iA = int.Parse(sS[2]);
                lstInp.Add(oneUsr);
            }

            System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
            sw.Start();

            // 解析
            List<ClsSmp> lstZan = new List<ClsSmp>();
            lstZan.Add(new ClsSmp() { iX = 00, iY = 00, iA = 0 });
            lstZan.Add(new ClsSmp() { iX = iW, iY = iH, iA = 0 });
            for (int i = 0; i < lstInp.Count; i++)
            {
                switch (lstInp[i].iA)
                {
                    case 1:
                        if (lstZan[0].iX < lstInp[i].iX) { lstZan[0].iX = lstInp[i].iX; }
                        break;
                    case 2:
                        if (lstZan[1].iX > lstInp[i].iX) { lstZan[1].iX = lstInp[i].iX; }
                        break;
                    case 3:
                        if (lstZan[0].iY < lstInp[i].iY) { lstZan[0].iY = lstInp[i].iY; }
                        break;
                    case 4:
                        if (lstZan[1].iY > lstInp[i].iY) { lstZan[1].iY = lstInp[i].iY; }
                        break;
                }
            }
            int iOut = 0;
            if (lstZan[0].iX >= lstZan[1].iX || lstZan[0].iY >= lstZan[1].iY) { iOut = 0; }
            else
            {
                iOut = (lstZan[1].iX - lstZan[0].iX) * (lstZan[1].iY - lstZan[0].iY);
            }

            // 出力
            Console.WriteLine("{0}", iOut.ToString());

            sw.Stop();
#if DEBUG
            Console.WriteLine();
            Console.WriteLine("{0}", sw.Elapsed.ToString());
            Console.WriteLine("続行するには何かキーを押してください．．．");
            Console.ReadKey();
#endif
    }
        private class ClsSmp
        {
            public int iX { get; set; } = 0;
            public int iY { get; set; } = 0;
            public int iA { get; set; } = 0;
        }
}