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 i=1;
            for (int a = 0; a < box2[0,2];a++)
            {
                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;
                        }

                    }
                    //Console.WriteLine("ここ");
                }

                //塗りつぶし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");
                 */
              
                /*
                int sum2 = 0;
                for (int d = 0; d < box2[0, 0]; d++)
                {
                    for (int c = 0; c < box2[0, 1]; c++)
                    {
                        sum2 = sum2 + area[d, c];
                    }
                }
                Console.Write(box2[0, 0] * box2[0, 1] - sum2);
                */

                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(' ');
            }
            */
          
        }

