import std;

alias sread = () => readln.chomp();
alias lread = () => readln.chomp.to!long();
alias aryread(T = long) = () => readln.split.to!(T[]);

void main()
{
    long w, h, n;
    scan(w, h, n);
    // writeln(w, h, n);
    auto tmp = new long[][](w, h);
    foreach (i; 0 .. tmp.length)
        tmp[i][] = 1;
    // writeln(tmp);
    //白1黒0
    foreach (i; 0 .. n)
    {
        long x, y, a;
        scan(x, y, a);
        // writeln(x, y, a);
        if (a == 1)
        {
            foreach (j; 0 .. x)
            {
                foreach (k; 0 .. h)
                {
                    tmp[j][k] = 0;
                }

            }

        }
        if (a == 2)
        {
            foreach (j; x .. w)
            {
                foreach (k; 0 .. h)
                {
                    tmp[j][k] = 0;
                }

            }

        }
        if (a == 3)
        {
            foreach (j; 0 .. w)
            {
                foreach (k; 0 .. y)
                {
                    tmp[j][k] = 0;
                }

            }

        }

        if (a == 4)
        {
            foreach (j; 0 .. w)
            {
                foreach (k; y .. h)
                {

                    tmp[j][k] = 0;
                }

            }
        }
        // writeln(tmp);
    }
    long ans;
    foreach (i; 0 .. tmp.length)
    {
        ans += sum(tmp[i]);
    }
    writeln(ans);
}

// long[string] AA;
// auto SS = ["AC", "WA", "AC"];

// foreach (S; SS)
// {
//     // if (S in AA)
//     // {
//     //     AA[S] = AA[S] + 1;
//     // }
//     // else
//     // {
//     //     AA[S] = 1;
//     // }
//     AA[S] = AA.get(S, 0) + 1;
// }
// }

// long get(long[string] aa, string key, long defaultValue)
// {
//     if (key in aa)
//     {
//         return aa[key];
//     }
//     else
//     {
//         return defaultValue;
//     }
// }

void scan(L...)(ref L A)
{
    auto l = readln.split;
    foreach (i, T; L)
    {
        A[i] = l[i].to!T;
    }
}
