#include <bits/stdc++.h>
using namespace std;
int n, m;
struct Edge {
  int s, t, f, c, next;
};
class MCMF {
 public:
  MCMF(int s, int t);
  void insert(int s, int t, int f, int c);
  bool spfa();
  void mcmf();
  void print();

 private:
  bool *isq;
  int s, t;
  int *dist;
  int ent;
  int cost, flow;
  int *head;
  int *pre;
  Edge *edge;
};
MCMF::MCMF(int s, int t) {
  this->s = s;
  this->t = t;
  ent = 0;
  cost = 0;
  flow = 0;
  isq = new bool[3010];
  dist = new int[3010];
  head = new int[3010];
  edge = new Edge[40500];
  pre = new int[40500];
  memset(head, -1, sizeof(int) * 3010);
}
void MCMF::insert(int s, int t, int f, int c) {
  edge[ent].s = s;
  edge[ent].t = t;
  edge[ent].f = f;
  edge[ent].c = c;
  edge[ent].next = head[s];
  head[s] = ent++;
  edge[ent].s = t;
  edge[ent].t = s;
  edge[ent].f = 0;
  edge[ent].c = -c;
  edge[ent].next = head[t];
  head[t] = ent++;
}
bool MCMF::spfa() {
  memset(pre, -1, sizeof(int) * 40500);
  for (int i = 1; i <= t; i++) {
    isq[i] = false;
    dist[i] = INT_MAX;
  }
  queue<int> q;
  q.push(s);
  isq[s] = true;
  dist[s] = 0;
  while (!q.empty()) {
    int temp1 = q.front();
    q.pop();
    isq[temp1] = false;
    for (int i = head[temp1]; i != -1; i = edge[i].next) {
      int temp2 = edge[i].t;
      if (edge[i].f && edge[i].c + dist[temp1] < dist[temp2]) {
        dist[temp2] = edge[i].c + dist[temp1];
        pre[temp2] = i;
        if (!isq[temp2]) q.push(temp2);
      }
    }
  }
  return pre[t] != -1;
}
void MCMF::mcmf() {
  while (spfa()) {
    int minn = INT_MAX;
    for (int i = pre[t]; i != -1; i = pre[i]) {
      minn = (minn < edge[i].f ? minn : edge[i].f);
      i = edge[i].s;
    }
    flow += minn;
    for (int i = pre[t]; i != -1; i = pre[i]) {
      edge[i].f -= minn;
      edge[i ^ 1].f += minn;
      i = edge[i].s;
    }
    cost += minn * dist[t];
  }
  cout << -cost << endl;
}
void MCMF::print() {
  for (int i = head[n + 2]; i != -1; i = edge[i].next)
    if (edge[i].f == 1 && edge[i].t != n + 4) printf("%d ", edge[i].t - 1);
  printf("\n");
  for (int i = head[n + 3]; i != -1; i = edge[i].next)
    if (edge[i].f == 1 && edge[i].t != n + 4) printf("%d ", edge[i].t - 1);
}
int a, b;
int main() {
  int s, t, c;
  scanf("%d%d%d", &n, &a, &b);
  MCMF *temp = new MCMF(1, n + 4);
  for (int i = 1; i <= n; i++) temp->insert(1, i + 1, 1, 0);
  for (int i = 1; i <= n; i++) {
    scanf("%d", &m);
    temp->insert(i + 1, n + 2, 1, -m);
  }
  for (int i = 1; i <= n; i++) {
    scanf("%d", &m);
    temp->insert(i + 1, n + 3, 1, -m);
  }
  temp->insert(n + 2, n + 4, a, 0);
  temp->insert(n + 3, n + 4, b, 0);
  temp->mcmf();
  temp->print();
  return 0;
}
