/** ____ ____ ____ ____ ____ ____ ||l |||e |||i |||n |||a |||d || ||__|||__|||__|||__|||__|||__|| |/__\|/__\|/__\|/__\|/__\|/__\| **/ #include #define endl '\n' using namespace std; typedef long long ll; const ll maxn = 510; void fast_io() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); } ll n, m, p, a[maxn][maxn], b[maxn][maxn], h[maxn], r1[maxn], c1[maxn]; struct change { char c; ll id, k; }; vector < change > v; bool check_row(ll row) { ll tek_sum = 0; for (ll j = 1; j <= m; j ++) tek_sum += a[row][j] * b[row][j]; ll id = -1, best = tek_sum; for (ll k = 1; k < m; k ++) { ll sum = r1[row]; for (ll j = 1; j <= m; j ++) { ll newid = j - k; if (j - k <= 0) newid = m + newid; ///cout << j << " " << newid << " " << k << endl; sum = sum + a[row][newid] * b[row][j]; } if (sum < best) { best = sum; id = k; } } ///cout << id << " - " << best << " - " << tek_sum << endl; if (id == -1) return false; for (ll j = 1; j <= m; j ++) { ll newid = j - id; if (j - id <= 0) newid = m + newid; h[j] = a[row][newid]; } for (ll j = 1; j <= m; j ++) a[row][j] = h[j]; v.push_back({'R', row, id}); return true; } bool check_col(ll col) { ll tek_sum = 0; for (ll i = 1; i <= n; i ++) tek_sum += a[i][col] * b[i][col]; ll id = -1, best = tek_sum; for (ll k = 1; k < n; k ++) { ll sum = c1[col]; for (ll i = 1; i <= n; i ++) { ll newid = i - k; if (i - k <= 0) newid = n + newid; ///cout << j << " " << newid << " " << k << endl; sum = sum + a[newid][col] * b[i][col]; } if (sum < best) { best = sum; id = k; } } ///cout << id << " - " << best << " - " << tek_sum << endl; if (id == -1) return false; for (ll i = 1; i <= n; i ++) { ll newid = i - id; if (i - id <= 0) newid = n + newid; h[i] = a[i][col]; } for (ll i = 1; i <= n; i ++) a[i][col] = h[i]; v.push_back({'C', col, id}); return true; } void solve()/// fixx LONG LONG { cin >> n >> m >> p; for (ll i = 1; i <= n; i ++) cin >> r1[i]; for (ll j = 1; j <= m; j ++) cin >> c1[j]; for (ll i = 1; i <= n; i ++) for (ll j = 1; j <= m; j ++) cin >> a[i][j]; for (ll i = 1; i <= n; i ++) for (ll j = 1; j <= m; j ++) cin >> b[i][j]; ll cnt = 0; //while(cnt < p) //{ bool done = true; for (ll i = 1; i <= n && cnt < p; i ++) { if (check_row(i)) cnt ++, done = false; } /*for (ll j = 1; j <= m && cnt < p; j ++) { if (check_col(j)) cnt ++, done = false; }*/ //if (done) // break; //} /**for (ll j = 1; j <= m; j ++) { if (check_col(j)) { break; } }*/ cout << v.size() << endl; for (ll i = 0; i < v.size(); i ++) { cout << v[i].c << " " << v[i].id << " " << v[i].k << endl; } } int main() { freopen ("movethematrix.in", "r", stdin); freopen ("movethematrix.out", "w", stdout); solve(); return 0; } /** 3 4 2 10 3 7 2 1 4 4 1 2 3 4 7 12 8 5 0 100 9 6 2 5 3 4 1 1 1 0 9 8 7 6 */