#include <bits/stdc++.h>
using namespace std;
const int M = 3100, INF = 0x3f3f3f3f;
int n, p, s;
int dp[2][M][M];
int a[M], b[M];
void inc(int& x, int y) {
  if (x < y) x = y;
}
namespace Dinic {
struct Edge {
  int v, n, f, c;
} e[M * 7];
int head[M], cur[M], inq[M], dis[M], E;
void add(int u, int v, int f, int c) {
  e[E] = (Edge){v, head[u], f, c};
  head[u] = E++;
  e[E] = (Edge){u, head[v], 0, -c};
  head[v] = E++;
}
bool bfs(int S, int T) {
  memset(dis, 0x3f, sizeof dis);
  memset(inq, 0, sizeof inq);
  queue<int> Q;
  dis[S] = 0;
  inq[S] = 1;
  Q.push(S);
  while (!Q.empty()) {
    int u = Q.front();
    Q.pop();
    inq[u] = 0;
    for (int i = head[u]; ~i; i = e[i].n) {
      int v = e[i].v, most = e[i].f;
      if (dis[v] > dis[u] + e[i].c && most > 0) {
        dis[v] = dis[u] + e[i].c;
        if (!inq[v]) {
          Q.push(v);
          inq[v] = 1;
        }
      }
    }
  }
  return dis[T] < INF;
}
int cost;
int dfs(int S, int T, int flow) {
  if (S == T) return flow;
  int sum = 0;
  inq[S] = 1;
  for (int& i = cur[S]; ~i; i = e[i].n) {
    int v = e[i].v, most = min(e[i].f, flow - sum);
    if (!inq[v] && dis[v] == dis[S] + e[i].c && most > 0) {
      most = dfs(v, T, most);
      e[i].f -= most;
      e[i ^ 1].f += most;
      cost += most * e[i].c;
      sum += most;
      if (sum == flow) return sum;
    }
  }
  inq[S] = 0;
  return sum;
}
int maxflow(int S, int T) {
  cost = 0;
  int flow = 0;
  while (bfs(S, T)) {
    for (int i = 1; i <= T; i++) cur[i] = head[i];
    flow += dfs(S, T, INF);
  }
  return flow;
}
int sta[M], top;
void work() {
  memset(head, -1, sizeof head);
  E = 0;
  int S = n + 1, T1 = n + 2, T2 = n + 3, T = n + 4;
  int base = 3001;
  for (int i = 1; i <= n; i++) {
    add(S, i, 1, 0);
    add(i, T1, 1, base - a[i]);
    add(i, T2, 1, base - b[i]);
  }
  add(T1, T, p, 0);
  add(T2, T, s, 0);
  int flow = maxflow(S, T);
  printf("%d\n", (p + s) * base - cost);
  top = 0;
  for (int i = 1; i <= n; i++) {
    for (int j = head[i]; ~j; j = e[j].n) {
      int v = e[j].v;
      if (v == T1 && e[j].f == 0) sta[++top] = i;
    }
  }
  for (int i = 1; i <= top; i++) printf("%d%c", sta[i], " \n"[i == top]);
  top = 0;
  for (int i = 1; i <= n; i++) {
    for (int j = head[i]; ~j; j = e[j].n) {
      int v = e[j].v;
      if (v == T2 && e[j].f == 0) sta[++top] = i;
    }
  }
  for (int i = 1; i <= top; i++) printf("%d%c", sta[i], " \n"[i == top]);
}
}  // namespace Dinic
int main() {
  scanf("%d%d%d", &n, &p, &s);
  for (int i = 1; i <= n; i++) {
    scanf("%d", &a[i]);
  }
  for (int i = 1; i <= n; i++) {
    scanf("%d", &b[i]);
  }
  Dinic::work();
}
