#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <vector>
#include <algorithm>

using namespace std;

const int size = 10000;
const int board_size = 200;

vector <int> straight[size];
vector <char> way;
vector <int> x_coord, y_coord;

int cnt, n, m, k, px[size], py[size], len, ln[size], rn[size], x[size], y[size], p, last;
bool field[board_size][board_size], move[2][board_size][board_size], used[size];

bool dfs(int v)
{
    used[v] = true;
    for (int i = 0; i < straight[v].size(); i++)
        if (rn[straight[v][i]] == -1 || (!used[rn[straight[v][i]]] && dfs(rn[straight[v][i]])))
        {
            ln[v] = straight[v][i];
            rn[straight[v][i]] = v;
            return true;
        }
    return false;
}

bool could(int i, int j)
{
    return (x[j] > x[i] && abs(y[i] - y[j]) == 1);
}

void make_step(int num, char c)
{
    x_coord.push_back(px[num]);
    y_coord.push_back(py[num]);
    way.push_back(c);
}

void move_forward(int num)
{
    make_step(num, 'F');
    field[px[num]][py[num]] = false;
    field[++px[num]][py[num]] = true;
}

void move_left(int num)
{
    make_step(num, 'L');
    cnt--;
    field[px[num]][py[num]] = false;
    move[0][px[num]++][py[num]--] = false;
}

void move_right(int num)
{
    make_step(num, 'R');
    cnt--;
    field[px[num]][py[num]] = false;
    move[1][px[num]++][py[num]++] = false;
}

int main()
{
    int i, j;

    freopen("pawns.in", "r", stdin);
    freopen("pawns.out", "w", stdout);

    scanf("%d%d%d%d", &n, &m, &p, &k);

    for (i = 0; i < p; i++)
    {
      x[i] = 1;
      scanf("%d", &y[i]);
      field[x[i]][y[i]] = true;
    }
    //fprintf(stderr, "here\n");

    //for (i = 0; i < m; i++)
    //{
    //    x[i] = 1;
    //    y[i] = i + 1;
    //    field[1][i + 1] = true;
    //}
    len = p;

    for (i = 0; i < k; i++)
    {
        scanf("%d%d", &x[len], &y[len]);
        field[x[len]][y[len]] = true;
        len++;
    }

    for (i = 0; i < len; i++)
        for (j = 0; j < len; j++)
            if (could(i, j))
                straight[i].push_back(j);

    for (i = 0; i < len; i++)
    {
        ln[i] = -1;
        rn[i] = -1;
    }

    for (i = 0; i < len; i++)
    {
        for (j = 0; j < len; j++)
            used[j] = false;
        if (ln[i] == -1)
            dfs(i);
    }

    int dif_ways = 0;
    for (i = 0; i < len; i++)
        dif_ways += (ln[i] == -1);

    if (dif_ways > p)
    {
        printf("NO");
        return 0;
    }
    printf("YES\n");
    //fprintf(stderr, "here\n");
    for (i = 0; i < p; i++)
    {
        px[i] = 1;
        py[i] = y[i];
    }
    for (i = 0; i < p; i++)
    {
        int ph = ln[i];
        last = i;
        while (ph != -1)
        {
            move[y[last] < y[ph]][x[ph] - 1][y[last]] = true;
            last = ph;
            ph = ln[last];
        }
    }
    cnt = k;
    while (cnt > 0)
    {
        for (i = 0; i < p; i++)
        {
            while (px[i] < n && !field[px[i] + 1][py[i]] && !move[0][px[i]][py[i]] && !move[1][px[i]][py[i]])
                move_forward(i);
            if (move[0][px[i]][py[i]])
                move_left(i);
            if (move[1][px[i]][py[i]])
                move_right(i);

        }
    }
    printf("%d\n", way.size());
    for (i = 0; i < way.size(); i++)
        printf("%d %d %c\n", x_coord[i], y_coord[i], way[i]);
    return 0;
}
