#include <bits/stdc++.h>
using namespace std;
#define int long long int
const int INF = 4e18;
template<class T> bool chmax(T& a, const T& b) {return a < b ? a = b, 1 : 0;}
template<class T> bool chmin(T& a, const T& b) {return b < a ? a = b, 1 : 0;}
using pi = pair<int, int>;
using vi = vector<int>;
using vvi = vector<vi>;
using vpi = vector<pi>;
using vvpi = vector<vector<pi>>;
#define bg(x) (x).begin()
#define en(x) (x).end()
#define all(x) bg(x), en(x)
#define sz(x) (int)((x).size())
#define rep(i,a,b) for (int i = a; i < b; i++)
#define rev(i,a,b) for (int i = a; i >= b; i--)
signed main() {
cin.tie(0)->sync_with_stdio(0);
int n,m; cin >> n >> m;
vi s(n); for (auto &x : s) cin >> x;
vi f(m+1, -INF); rep(i, 1, m+1) cin >> f[i];
if (n == 1 && f[1] < s[0] && f[m] > s[0]) {
cout << "-1\n";
return 0;
} else if (n == 1) {
if (f[m] <= s[0]) {
cout << (s[0]-f[1]) << "\n";
cout << "L\n";
} else {
cout << (f[m] - s[0]) << "\n";
cout << "R\n";
}
return 0;
}
vi nearest(n);
int pos = 0;
rep(i, 0, n) {
while (pos < m && f[pos+1] < s[i]) pos++;
nearest[i] = f[pos];
}
auto build = [&](int x, bool left) {
vi orient(n);
// if (f[1] >= s[0]) orient[0] = 1;
if (left) orient[0] = 0;
else orient[0] = 1;
rep(i, 1, n) {
if (orient[i-1] == 0 && nearest[i] > s[i-1]) orient[i] = 0;
else if (orient[i-1] == 0 && nearest[i] <= s[i-1]) orient[i] = 1;
else if (orient[i-1] == 1 && nearest[i] > s[i-1]+x) orient[i] = 0;
else orient[i] = 1;
}
return orient;
};
auto check = [&](int x, bool left) {
vi orient = build(x, left);
vi is_ok(m);
priority_queue<int> pq; int pos = 0;
rep(i, 1, m+1) {
while (pos < n && s[pos] <= f[i]) {
if (orient[pos++] == 0) continue;
pq.push(s[pos-1]+x);
}
if (!pq.empty() && pq.top() >= f[i]) is_ok[i-1] = 1;
}
auto pq2 = priority_queue<int, vi, greater<int>>();
pos = n-1;
rev(i, m, 1) {
while (pos >= 0 && s[pos] >= f[i]) {
if (orient[pos--] == 1) continue;
pq2.push(s[pos+1]-x);
}
if (!pq2.empty() && pq2.top() <= f[i]) is_ok[i-1] = 1;
}
return *min_element(all(is_ok)) > 0;
};
int lo = 0, hi = 2e9;
while (lo < hi) {
int mid = lo + (hi-lo)/2;
if (check(mid, true) || check(mid, false)) hi = mid;
else lo = mid + 1;
}
cout << lo << "\n";
auto o = check(lo, true) ? build(lo, true) : build(lo, false);
rep(i, 0, n) cout << (o[i] == 0 ? "L" : "R"); cout << "\n";
return 0;
}