#pragma comment(linker, "/STACK:60000000")
#define _CRT_SECURE_NO_WARNINGS

#include <cstdio>
#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>
#include <string>
#include <set>
#include <map>
#include <ctime>
#include <cstring>
#include <cassert>
#include <sstream>
#include <iomanip>
#include <complex>
#include <queue>
#include <functional>

using namespace std;

#define forn(i, n) for(int i = 0; i < (int)(n); i++)
#define ford(i, n) for(int i = (int)(n) - 1; i >= 0; i--)
#define pb push_back
#define mp make_pair
#define fs first
#define sc second
#define x first
#define y second
#define last(a) int(a.size() - 1)
#define all(a) a.begin(), a.end()
#define seta(a,x) memset (a, x, sizeof (a))
#define I (int)
#define norm(a) sort(all(a)), a.erase(unique(all(a)), a.end())
#define num(a,x) (int)(lower_bound(all(a), x) - a.begin())
#define y1 botva

typedef long long int64;
typedef pair <int, int> pii;
typedef long double ldb;

const long double eps = 1e-7;
const int inf = (1 << 30) - 1;
const int64 inf64 = ((int64)1 << 62) - 1;
const long double pi = 3.1415926535897932384626433832795;
const string task = "pawns";

template <class T> T sqr (T x) {return x * x;}

const int nmax = 2010;
const int xmax = 110;

int n, m, k;
vector< pair < pair < int, int >, char > > res;
pii a[nmax], pos[nmax];
vector<int> g[nmax];
int next[nmax], prev[nmax];
bool used[nmax];
int busy[xmax][xmax], p[nmax];

void simulate(){
	forn (i, n + k)
		if (prev[i] >= 0 && pos[prev[i]].x == pos[i].x + 1)
			p[i - n + 2] = 1;
		else
			p[i - n + 2] = -1;
//	forn(i,k)
//		cerr << prev[i + n] << " " << p[i + 2] << endl;
//	cerr << endl;
	seta(busy, 0);
	forn(i, n)
		busy[pos[i].fs][pos[i].sc] = 1;
	forn(i, k)
		busy[pos[i + n].fs][pos[i + n].sc] = i + 2;
	int kill = 0;
	while (kill < k){	
//		for (int i = 1; i <= n; i ++){
//			for (int j = 1; j <= m; j++)
//				cerr << busy[i][j] << " ";
//			cerr << endl;
//		}
		bool done = 0;
		for (int i = 1; i <= n; i++)
			for (int j = 1; j <= m; j++)
				if (busy[i][j] == 1){
					if (busy[i+1][j+1] >= 2 && p[busy[i+1][j+1]] == -1){
						done = 1;
						kill ++;
						res.pb(mp (mp (i, j), 'R') );
						busy[i][j] = 0;
						busy[i+1][j+1] = 1;
						break;
					}
					if (busy[i-1][j+1] >= 2 && p[busy[i-1][j+1]] == 1){
						done = 1;
						kill ++;
						res.pb(mp (mp (i, j), 'L') );
						busy[i][j] = 0;
						busy[i-1][j+1] = 1;
						break;
					}
					if (j + 1 <= m && busy[i][j+1] == 0){
						done = 1;
						busy[i][j+1] = 1;
						busy[i][j] = 0;
						res.pb(mp (mp (i, j), 'F') );
						break;
					}
				}
//		cerr << endl;
//		cerr << res.size() << endl;
		assert(done);
	}
}

void no(){
	puts("No");
	exit(0);
}

bool go(int v){
	used[v] = 1;
	forn(i,g[v].size())
		if (prev[g[v][i]] == -1 || (!used[prev[g[v][i]]] && go(prev[g[v][i]]))){
			next[v] = g[v][i];
			prev[g[v][i]] = v;
			return 1;
		}
	return 0;
}

void match(){
	seta(next, 255);
	seta(prev, 255);
	int cnt = 0;
	for (int i = 0; i < n + k; i++)
		if (next[i] == -1){
			seta(used, 0);
			if (go(i)) cnt ++;
		}
	if (cnt < k)
		no();
	assert(cnt == k);
}	

void build(){
	forn(i,n)
		pos[i] = mp(i+1, 1);
	forn(i, k)
		pos[n + i] = a[i];
	forn(i,n + k)
		forn(j, n + k)
			if (pos[i].y < pos[j].y && abs(pos[i].x - pos[j].x) == 1){
				g[i].pb (j);
//				cerr << i << " " << j << endl;
			}
}

void solve(){
	build();
	match();
	simulate();
}

void read(){
	scanf("%d %d %d", &n, &m, &k);
        swap(n, m);

	forn(i, k){
		scanf("%d %d", &a[i].x, &a[i].y);
                swap(a[i].x, a[i].y);
        }
}

void write(){
	puts("Yes");
	cout << res.size() << endl;
	forn(i, res.size())
		printf("%d %d %c\n", res[i].fs.sc, res[i].fs.fs, res[i].sc);
}

int main ()
{
	freopen ((task + ".in").data(), "r", stdin);
	freopen ((task + ".out").data(), "w", stdout);

	read();
	solve();
	write();

	return 0;
}
