#include <bits/stdc++.h>
using namespace std;
const int MAXN = 3000005;
const int MAXM = 3000005;
struct Edge {
  int s, t, nxt;
} e[MAXM];
int cnt, cur;
int head[MAXN], num[MAXN], f[MAXN];
int res[MAXM];
void init(int n) {
  cur = 0;
  cnt = n;
  memset(head + 1, -1, sizeof(int) * n);
  memset(num + 1, 0, sizeof(int) * n);
  for (int i = 1; i <= n; i++) f[i] = i;
}
int get_fa(int i) {
  if (f[i] == i) return i;
  return f[i] = get_fa(f[i]);
}
void add_edge(int s, int t) {
  e[cur] = {s, t, head[s]};
  head[s] = cur++;
  num[s]++;
  num[t]--;
  f[get_fa(s)] = get_fa(t);
}
void euler(int i) {
  static int pos[MAXN], s[MAXN];
  int top = 0, j = 0, k = head[i];
  memcpy(pos + 1, head + 1, sizeof(int) * cnt);
  while (1) {
    if (k != -1) {
      s[top++] = k;
      pos[e[k].s] = e[k].nxt;
      k = pos[e[k].t];
      continue;
    }
    if (--top < 0) return;
    res[j++] = s[top];
    k = pos[e[s[top]].s];
  }
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  int n, m, k;
  cin >> n >> m >> k;
  if (k > 4 * n * m - 2 * n - 2 * m) {
    cout << "NO\n";
  } else {
    auto get_id = [&](int x, int y) -> int { return (x - 1) * m + y; };
    init(n * m + 1);
    for (int i = 1; i <= n; i++) {
      for (int j = 1; j <= m; j++) {
        if (i != n) add_edge(get_id(i, j), get_id(i + 1, j));
        if (j != m) add_edge(get_id(i, j), get_id(i, j + 1));
        if (i != 1) add_edge(get_id(i, j), get_id(i - 1, j));
        if (j != 1) add_edge(get_id(i, j), get_id(i, j - 1));
      }
    }
    euler(get_id(1, 1));
    reverse(res, res + 4 * n * m - 2 * n - 2 * m);
    vector<pair<int, string>> ans;
    string last;
    int last_cnt = 0;
    int done = -1;
    auto get_d = [&](int i) -> char {
      int id = res[i];
      char d = 0;
      if (e[id].t == e[id].s + 1) d = 'R';
      if (e[id].t == e[id].s - 1) d = 'L';
      if (e[id].t == e[id].s + m) d = 'D';
      if (e[id].t == e[id].s - m) d = 'U';
      return d;
    };
    for (int i = 0; i + 2 < k; i += 3) {
      string cur;
      cur += get_d(i);
      cur += get_d(i + 1);
      cur += get_d(i + 2);
      done = i + 2;
      if (cur != last) {
        if (i) ans.push_back(make_pair(last_cnt, last));
        last = cur;
        last_cnt = 1;
      } else {
        ++last_cnt;
      }
    }
    if (k >= 3) ans.push_back(make_pair(last_cnt, last));
    for (int i = done + 1; i < k; i++) {
      string d;
      d += get_d(i);
      ans.push_back(make_pair(1, d));
    }
    cout << "YES\n";
    assert((int)ans.size() <= 3000);
    cout << ans.size() << "\n";
    for (auto t : ans) {
      cout << t.first << " " << t.second << "\n";
    }
  }
  return 0;
}
