#include <bits/stdc++.h>
using namespace std;
const long long int dx[] = {0, 1, -1, 0, 1, -1, -1, 1};
const long long int dy[] = {-1, 0, 0, 1, 1, 1, -1, -1};
long long int gcd(long long int x, long long int y) {
  return (y != 0 ? gcd(y, x % y) : x);
}
long long int lcm(long long int x, long long int y) {
  return (x / gcd(x, y) * y);
}
struct edge {
  int viz;
  int cap;
  int cost;
  int dual;
  edge() {}
  edge(int viz, int cap, int cost, int dual)
      : viz(viz), cap(cap), cost(cost), dual(dual) {}
};
int pro[3054];
int spo[3054];
vector<edge> g[3054];
int d[3054];
int p[3054];
int p_edge[3054];
int color[3054];
int flow;
int fcost;
void add_edge(int x, int y, int cap, int cost) {
  g[x].push_back(edge(y, cap, cost, (int)g[y].size()));
  g[y].push_back(edge(x, 0, -cost, (int)g[x].size() - 1));
}
int SPFA(int s, int t) {
  queue<int> fila;
  for (int i = 0; i <= t; i++) {
    d[i] = 1000000000;
    color[i] = 0;
  }
  d[s] = 0;
  fila.push(s);
  while (!fila.empty()) {
    int next = fila.front();
    color[next] = 0;
    fila.pop();
    for (int i = 0; i < (int)g[next].size(); i++) {
      int viz = g[next][i].viz;
      int cap = g[next][i].cap;
      int cost = d[next] + g[next][i].cost;
      if (cap > 0 && d[viz] > cost) {
        d[viz] = cost;
        p_edge[viz] = i;
        p[viz] = next;
        if (color[viz] == 0) {
          fila.push(viz);
          color[viz] = 1;
        }
      }
    }
  }
  return d[t] != 1000000000;
}
void mcmf(int s, int t) {
  while (SPFA(s, t)) {
    int augment = 1000000000;
    for (int v = t; v != s; v = p[v]) {
      int idx = p_edge[v];
      augment = min(augment, g[p[v]][idx].cap);
    }
    for (int v = t; v != s; v = p[v]) {
      int idx = p_edge[v];
      int dual = g[p[v]][idx].dual;
      g[p[v]][idx].cap -= augment;
      g[v][dual].cap += augment;
    }
    flow += augment;
    fcost += d[t] * augment;
  }
  return;
}
int main(void) {
  int src = 3054 - 1;
  int sink = 3054 - 2;
  int sports = 3054 - 3;
  int programming = 3054 - 4;
  int n, pp, ss;
  cin >> n >> pp >> ss;
  for (int i = 0; i < n; i++) {
    add_edge(src, i, 1, 0);
    cin >> pro[i];
    add_edge(i, programming, 1, -pro[i]);
  }
  for (int i = 0; i < n; i++) {
    cin >> spo[i];
    add_edge(i, sports, 1, -spo[i]);
  }
  add_edge(programming, sink, pp, 0);
  add_edge(sports, sink, ss, 0);
  mcmf(src, sink);
  cout << -fcost << endl;
  vector<int> saida1, saida2;
  for (int i = 0; i < n; i++) {
    if (g[i][1].cap == 0) {
      saida1.push_back(i + 1);
    }
    if (g[i][2].cap == 0) {
      saida2.push_back(i + 1);
    }
  }
  for (int i = 0; i < saida1.size(); i++) {
    cout << saida1[i] << " ";
  }
  cout << endl;
  for (int i = 0; i < saida2.size(); i++) {
    cout << saida2[i] << " ";
  }
  cout << endl;
  return 0;
}
