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: Runtime Error)

using System;

    class Program
    {
       /* class Sunuke
        {
            public int width;
            public int height;
            public int ar;

        }
        */
        static void Main(string[] args)
        {

            int[,] box2 = new int[100, 3];//百行三列の配列を用意
            //forで回してとりあえず全部取り入れる

            //まず最初の一行は外側の四角をつくる
            string[] stra = Console.ReadLine().Split(' ');
            box2[0, 0] = int.Parse(stra[0]);
            box2[0, 1] = int.Parse(stra[1]);
            box2[0, 2] = int.Parse(stra[2]);

            //面積をシミュレーションする二次元配列を用意した
            int[,] area = new int[box2[0, 0], box2[0, 1]];
            for (int b = 0; b < box2[0, 0]; b++)
            {
                for (int c = 0; c < box2[0, 1]; c++)
                {
                    area[b, c] = 0;
                }
            }

            
            //確認 
           /*for (int d = 0; d < box2[0, 0]; d++)
            {
                for (int c = 0; c < box2[0, 1]; c++)
                {
                    Console.Write(area[d, c]);
                }
                Console.WriteLine();
            }
            System.Threading.Thread.Sleep(1000);
            */

            int a=0;
            int i=1;
           while (a==0)
           {   string[] strb = Console.ReadLine().Split(' ');
           if (strb[0] == "")
               {
                   break;
               }
               //intにして二次元配列に保存
               box2[i,0] = int.Parse(strb[0]);
               box2[i,1] = int.Parse(strb[1]);
               box2[i,2] = int.Parse(strb[2]);
              
               //塗りつぶし1のときは、ｘより小さいところを塗りつぶす
               if (box2[i, 2] == 1)
               {
                   for (int s = 0; s < box2[i, 0]; s++)//xについてみている
                   {
                       for (int t = 0; t < box2[0, 1]; t++)
                       {
                           area[s, t] = 1;
                       }

                   }
               }

               //塗りつぶし2のときは、ｘより大きいところを塗りつぶす
               if (box2[i, 2] == 2)
               {
                   for (int s = box2[i, 0]; s < box2[0, 0]; s++)
                   {
                       for (int t = 0; t < box2[0, 1]; t++)
                       {
                           area[s, t] = 1;
                       }

                   }
               }

               //塗りつぶし3のときは、yより小さいところを塗りつぶす
               if (box2[i, 2] == 3)
               {
                   for (int s = 0; s < box2[0, 0]; s++)//xについてみている
                   {
                       for (int t = 0; t < box2[i, 1]; t++)
                       {
                           area[s, t] = 1;
                       }

                   }
               }

               //塗りつぶし4のときは、yより大きいところを塗りつぶす
               if (box2[i, 2] == 4)
               {
                   for (int s = 0; s < box2[0, 0]; s++)
                   {
                       for (int t = box2[i,1]; t < box2[0, 1]; t++)
                       {
                           area[s, t] = 1;
                       }

                   }
               }
               /*
               //面積のように配列の中身を表示する
               for (int d = 0; d < box2[0, 0]; d++)
               {
                   for (int c = 0; c < box2[0, 1]; c++)
                   {
                       Console.Write(area[d, c]);
                   }
                   Console.WriteLine();
               }

               //確認用
               Console.WriteLine(box2[i, 0] + "a");
               Console.WriteLine(box2[i, 1] + "b");
               Console.WriteLine(box2[i, 2] + "c");
             //  Console.WriteLine(box2[i, 1] + "a");
                */
               i++;  
           }

           

            
            /*
            //面積のように配列の中身を表示する
            for (int d = 0; d < box2[0, 0]; d++)
            {
                for (int c = 0; c < box2[0, 1]; c++)
                {
                    Console.Write(area[d, c]);
                }
                Console.WriteLine();
            }
            */

            //足し合わせ
            int sum = 0;
            for (int d = 0; d < box2[0, 0]; d++)
            {
                for (int c = 0; c < box2[0, 1]; c++)
                {
                    sum=sum+area[d, c];
                 //   Console.Write(sum);
                }
            }
            Console.Write(box2[0,0]*box2[0,1]-sum);

        //   Console.WriteLine(box2[1,1] + "a");
         //  System.Threading.Thread.Sleep(8000);

               //while (strb[0] == "")
               //{               }
              
           // box2[if,j]=

        //    int[][] box = new int[][]{
                 //配列の配列を作成する
        //         new int[]{1, 2, 0},

       //     };
                //     int.Parse(strb[0]);
/*            Console.WriteLine(strb[0]+"a");
            if (strb[0] == "")
            {
                Console.WriteLine("から");
            }
            else
            {
                Console.WriteLine("nullじゃないよ");
            }
            System.Threading.Thread.Sleep(1000);
 */

         //  int i = 1;
         //   string[] str = Console.ReadLine().Split(' ');
   
        }
           /* for (i = 0; ; i++)
            {
                string[] strb=Console.ReadLine().Split(' ');
            }
            */
          
        }