#include <bits/stdc++.h>
using namespace std;
const int MAXN = 10000;
const long long INFFLUJO = 1e14;
const long long INFCOSTO = 1e14;
struct edge {
  int u, v;
  long long cap, flow;
  long long cost;
  long long rem() { return cap - flow; }
};
long long a[MAXN], b[MAXN];
int nodes;
vector<int> G[MAXN];
vector<edge> e;
void addEdge(int u, int v, long long cap, long long cost) {
  G[u].push_back(((int)e.size()));
  e.push_back((edge){u, v, cap, 0, cost});
  G[v].push_back(((int)e.size()));
  e.push_back((edge){v, u, 0, 0, -cost});
}
long long dist[MAXN], mnCost;
int pre[MAXN];
long long cap[MAXN], mxFlow;
bool in_queue[MAXN];
void flow(int s, int t) {
  memset(in_queue, 0, sizeof(in_queue));
  mxFlow = mnCost = 0;
  while (1) {
    fill(dist, dist + nodes, INFCOSTO);
    dist[s] = 0;
    memset(pre, -1, sizeof(pre));
    pre[s] = 0;
    memset(cap, 0, sizeof(cap));
    cap[s] = INFFLUJO;
    queue<int> q;
    q.push(s);
    in_queue[s] = 1;
    while (((int)q.size())) {
      int u = q.front();
      q.pop();
      in_queue[u] = 0;
      for (auto it : G[u]) {
        edge &E = e[it];
        if (E.rem() && dist[E.v] > dist[u] + E.cost + 1e-9) {
          dist[E.v] = dist[u] + E.cost;
          pre[E.v] = it;
          cap[E.v] = min(cap[u], E.rem());
          if (!in_queue[E.v]) q.push(E.v), in_queue[E.v] = 1;
        }
      }
    }
    if (pre[t] == -1) break;
    mxFlow += cap[t];
    mnCost += cap[t] * dist[t];
    for (int v = t; v != s; v = e[pre[v]].u) {
      e[pre[v]].flow += cap[t];
      e[pre[v] ^ 1].flow -= cap[t];
    }
  }
}
int u[MAXN], v[MAXN];
long long cst[MAXN], D, K;
vector<int> nico, pocho;
int main() {
  int n, s, p;
  scanf("%d%d%d", &n, &s, &p);
  for (int i = 0; i < n; i++) scanf("%lld", a + i);
  for (int i = 0; i < n; i++) scanf("%lld", b + i);
  for (int i = 0; i < n; i++) addEdge(0, i + 1, 1, 0);
  for (int i = 0; i < n; i++) addEdge(i + 1, n + 1, 1, -a[i]);
  for (int i = 0; i < n; i++) addEdge(i + 1, n + 2, 1, -b[i]);
  addEdge(n + 1, n + 3, s, 0);
  addEdge(n + 2, n + 3, p, 0);
  nodes = n + 4;
  flow(0, n + 3);
  printf("%lld\n", -mnCost);
  for (int i = 0; i < e.size(); i++) {
    if (e[i].flow == 0) continue;
    if (e[i].u == n + 1 && e[i].v != n + 3 && e[i].cap == 0)
      nico.push_back(e[i].v);
    else if (e[i].u == n + 2 && e[i].v != n + 3 && e[i].cap == 0)
      pocho.push_back(e[i].v);
  }
  for (int i = 0; i < nico.size(); i++) {
    if (i) printf(" ");
    printf("%d", nico[i]);
  }
  puts("");
  for (int i = 0; i < pocho.size(); i++) {
    if (i) printf(" ");
    printf("%d", pocho[i]);
  }
  puts("");
}
