#include <bits/stdc++.h>
using namespace std;
int n, p, s;
bool inqueue[10000];
int d[10000];
int pre[10000];
struct edge {
  int to;
  int cap;
  int cost;
} graph[50000];
int edge_num = 0;
int ans = 0;
vector<int> edge_list[10000];
void add_edge(int from, int to, int cap, int cost) {
  graph[edge_num].to = to;
  graph[edge_num].cap = cap;
  graph[edge_num].cost = cost;
  graph[edge_num + 1].to = from;
  graph[edge_num + 1].cap = 0;
  graph[edge_num + 1].cost = -cost;
  edge_list[from].push_back(edge_num);
  edge_list[to].push_back(edge_num + 1);
  edge_num += 2;
}
void SPFA() {
  queue<int> relax;
  d[0] = 0;
  relax.push(0);
  inqueue[0] = true;
  while (!relax.empty()) {
    int cur = relax.front();
    relax.pop();
    inqueue[cur] = false;
    for (vector<int>::iterator iter = edge_list[cur].begin();
         iter != edge_list[cur].end(); iter++) {
      if (d[graph[*iter].to] < d[cur] + graph[*iter].cost && graph[*iter].cap) {
        if (!inqueue[graph[*iter].to]) {
          inqueue[graph[*iter].to] = true;
          relax.push(graph[*iter].to);
        }
        d[graph[*iter].to] = d[cur] + graph[*iter].cost;
        pre[graph[*iter].to] = *iter;
      }
    }
  }
}
int main() {
  cin >> n >> p >> s;
  int temp;
  add_edge(3 * n + 1, 3 * n + 3, p, 0);
  add_edge(3 * n + 2, 3 * n + 3, s, 0);
  for (int i = 1; i <= n; i++) {
    scanf("%d", &temp);
    add_edge(0, i, 1, 0);
    add_edge(i, n + i, 1, temp);
    add_edge(n + i, 3 * n + 1, 1, 0);
  }
  for (int i = 1; i <= n; i++) {
    scanf("%d", &temp);
    add_edge(i, 2 * n + i, 1, temp);
    add_edge(2 * n + i, 3 * n + 2, 1, 0);
  }
  while (1) {
    memset(inqueue, 0x00, sizeof(inqueue));
    memset(d, 0xB0, sizeof(d));
    memset(pre, 0xFF, sizeof(pre));
    SPFA();
    if (d[3 * n + 3] == (int)0xB0B0B0B0) break;
    ans += d[3 * n + 3];
    for (int cur = 3 * n + 3; cur;) {
      int t = pre[cur];
      graph[t].cap--;
      graph[t ^ 1].cap++;
      cur = graph[t ^ 1].to;
    }
  }
  cout << ans << endl;
  for (int i = 1; i <= n; i++) {
    if (graph[edge_list[i][1]].cap == 0) cout << i << " ";
  }
  cout << endl;
  for (int i = 1; i <= n; i++) {
    if (graph[edge_list[i][2]].cap == 0) cout << i << " ";
  }
  return 0;
}
