#include <bits/stdc++.h>
using namespace std;

//#define int long long
#define rep(i, a, b) for (int i = a; i < (b); ++i)
#define f(i,a,b) for(int i = (a); i < (b); ++i)

using ll = long long;

typedef vector<int> vi;

struct TwoSat
{
    int N;
    vector<vi> gr;
    vi values;

    TwoSat(int n = 0) : N(n), gr(2 * n) {}

    void either(int f, int j)
    {
        f = max(2 * f, - 1 - 2 * f);
        j = max(2 * j, - 1 - 2 * j);
        gr[f].push_back(j ^ 1);
        gr[j].push_back(f ^ 1);
    }
    vi val, comp, z;
    int time = 0;
    int dfs(int i)
    {
        int low = val[i] = ++time, x;
        z.push_back(i);
        for (int e : gr[i])
        {
            if (!comp[e])
            {
                low = min(low, val[e] ?: dfs(e));
            }
        }
        if (low == val[i])
        {
            do
            {
                x = z.back();
                z.pop_back();
                comp[x] = low;
                if (values[x >> 1] == -1)
                {
                    values[x >> 1] = x & 1;
                }
            } while (x != i);
        }
        return val[i] = low;
    }

    bool solve()
    {
        values.assign(N, -1);
        val.assign(2 * N, 0);
        comp = val;
        rep(i, 0, 2 * N) if (!comp[i]) dfs(i);
        rep(i, 0, N) if (comp[2 * i] == comp[2 * i + 1]) return 0;
        return 1;
    }

    void setValue(int x)
    {
        either(x, x);
    }
};

struct Dock
{
    bool dir;//0 - vert, 1 - hor
    int x, y, len;
};

signed main()
{
    cin.tie(0)->sync_with_stdio(0);
    int h, w, n;
    cin >> h >> w >> n;
    array<array<pair<vector<int>, bool>, 501>, 501> table;
    vector<Dock> docks(n);
    for (int i = 0; i < n; ++i)
    {
        cin >> docks[i].x >> docks[i].y >> docks[i].len;
        char dir;
        cin >> dir;
        if (dir == 'L')
        {
            dir = 'R';
            docks[i].y -= docks[i].len - 1;
        }
        if (dir == 'U')
        {
            dir = 'D';
            docks[i].x -= docks[i].len - 1;
        }
        if (dir == 'R') docks[i].dir = 1;
        else docks[i].dir = 0;
        if (docks[i].dir == 0)
        {
            //vertical, going down
            table[docks[i].x][docks[i].y].first.emplace_back(i);
            for (int j = docks[i].x + 1; j + 1 < docks[i].x + docks[i].len; ++j)
            {
                if (table[j][docks[i].y].second)
                {
                    cout << "No\n";
                    return 0;
                }
                table[j][docks[i].y].second = true;
            }
            table[docks[i].x + docks[i].len - 1][docks[i].y].first.emplace_back(~i);
        }
        if (docks[i].dir == 1)
        {
            //horizontal, going right
            table[docks[i].x][docks[i].y].first.emplace_back(i);
            for (int j = docks[i].y + 1; j + 1 < docks[i].y + docks[i].len; ++j)
            {

                if (table[docks[i].x][j].second)
                {
                    cout << "No\n";
                    return 0;
                }
                table[docks[i].x][j].second = true;
            }
            table[docks[i].x][docks[i].y + docks[i].len - 1].first.emplace_back(~i);
        }
    }
    TwoSat sat(n);
    for (int i = 1; i <= h; ++i)
    {
        for (int j = 1; j <= w; ++j)
        {
            if (table[i][j].first.size() > 8)
            {
                cout << "No\n";
                return 0;
            }
            if (table[i][j].second)
            {
                for (auto k : table[i][j].first) sat.setValue(~k);
            }
            else
            {
                for (int k = 0; k < table[i][j].first.size(); ++k)
                {
                    for (int l = k + 1; l < table[i][j].first.size(); ++l)
                    {
                        sat.either(table[i][j].first[k], table[i][j].first[l]);
                        sat.either(~table[i][j].first[k], ~table[i][j].first[l]);
                    }
                }
            }
        }
    }
    if (sat.solve()) cout << "Yes\n";
    else cout << "No\n";
    return 0;
}