#include <bits/stdc++.h>
using namespace std;
const int M = 3010;
const int inf = 1e9;
int n, p, s;
int a[M], mxa;
int b[M], mxb;
int N;
vector<int> neigh[M];
int cap[M][M], cost[M][M];
int dist[M], par[M];
vector<int> res[2];
void addEdge(int a, int b, int cp, int cst) {
  neigh[a].push_back(b);
  neigh[b].push_back(a);
  cap[a][b] = cp;
  cap[b][a] = 0;
  cost[a][b] = cst;
  cost[b][a] = -cst;
}
bool getFlow(int &add) {
  fill(dist, dist + N, inf);
  dist[0] = 0;
  priority_queue<pair<int, int> > pq;
  pq.push(make_pair(-dist[0], 0));
  while (!pq.empty()) {
    int v = pq.top().second;
    int d = -pq.top().first;
    pq.pop();
    if (dist[v] != d) continue;
    for (int i = 0; i < neigh[v].size(); i++) {
      int u = neigh[v][i];
      if (cap[v][u] && d + cost[v][u] < dist[u]) {
        dist[u] = d + cost[v][u];
        par[u] = v;
        pq.push(make_pair(-dist[u], u));
      }
    }
  }
  int v = N - 1;
  add = dist[v];
  if (add >= inf) return false;
  while (v) {
    int u = par[v];
    cap[u][v]--;
    cap[v][u]++;
    v = u;
  }
  return true;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin >> n >> p >> s;
  N = 1 + n + 2 + 1;
  for (int i = 1; i <= n; i++) {
    cin >> a[i];
    mxa = max(a[i], mxa);
  }
  for (int i = 1; i <= n; i++) {
    cin >> b[i];
    mxb = max(b[i], mxb);
  }
  for (int i = 1; i <= n; i++) {
    addEdge(0, i, 1, 0);
    addEdge(i, N - 3, 1, mxa - a[i]);
    addEdge(i, N - 2, 1, mxb - b[i]);
  }
  addEdge(N - 3, N - 1, p, 0);
  addEdge(N - 2, N - 1, s, 0);
  int tot = 0, add;
  while (getFlow(add)) {
    tot += add;
  }
  for (int i = 1; i <= n; i++) {
    if (cap[N - 3][i] > 0) {
      res[0].push_back(i);
    } else if (cap[N - 2][i] > 0) {
      res[1].push_back(i);
    }
  }
  cout << mxa * p + mxb * s - tot << "\n";
  for (int i = 0; i < 2; i++) {
    for (int j = 0; j < res[i].size(); j++) {
      cout << res[i][j] << " ";
    }
    cout << "\n";
  }
  return 0;
}
