#include <iostream>
#include <vector>
#include <algorithm>
#include <set>
std::vector<int> matching;
std::vector<char> visited;
bool try_kuhn (int v, std::vector <std::vector<int>> &graph) {
if (visited[v]) {
return false;
}
visited[v] = true;
for (int i = 0; i < graph[v].size(); ++i) {
int to = graph[v][i];
if (matching[to] == -1 || try_kuhn (matching[to], graph)) {
matching[to] = v;
return true;
}
}
return false;
}
int main() {
int n, m, e;
std::cin >> n >> m >> e;
std::vector<std::pair<int, int>> weights_n(n);
std::vector<std::pair<int, int>> weights_m(m);
std::vector<int> edges;
std::vector <std::vector<int>> graph_n(n);
std::vector <std::vector<int>> graph_m(m);
std::vector <std::vector<int>> edges_matching(n);
std::vector<int> vertices_n(n);
std::vector<int> vertices_m(m);
for (int i = 0; i < n; ++i){
std::cin >> weights_n[i].first;
weights_n[i].second = i;
edges_matching[i].assign(m, 0);
}
for (int i = 0; i < m; ++i){
std::cin >> weights_m[i].first;
weights_m[i].second = i;
}
std::sort(weights_n.begin(), weights_n.begin() + weights_n.size(), std::greater<>());
std::sort(weights_m.begin(), weights_m.begin() + weights_m.size(), std::greater<>());
for (int i = 0; i < n; ++i) {
vertices_n[weights_n[i].second] = i;
}
for (int i = 0; i < m; ++i) {
vertices_m[weights_m[i].second] = i;
}
for (int i = 0; i < e; ++i){
int u, v;
std::cin >> u >> v;
edges_matching[u - 1][v - 1] = i + 1;
graph_n[vertices_n[u - 1]].push_back(v - 1);
graph_m[vertices_m[v - 1]].push_back(u - 1);
}
matching.assign(m, -1);
for (int v = 0; v < n; ++v) {
visited.assign (n, false);
try_kuhn (v, graph_n);
}
std::set<int> used_edges;
for (int i = 0; i < m; ++i){
if (matching[i] != -1) {
used_edges.insert(edges_matching[weights_n[matching[i]].second][i]);
}
}
matching.assign(n, -1);
for (int v = 0; v < m; ++v) {
visited.assign (m, false);
try_kuhn (v, graph_m);
}
std::vector<int> ret;
int weight = 0;
for (int i = 0; i < n; ++i){
if (matching[i] != -1) {
if (used_edges.count(edges_matching[i][weights_m[matching[i]].second])){
ret.push_back(edges_matching[i][weights_m[matching[i]].second]);
weight += weights_n[vertices_n[i]].first + weights_m[matching[i]].first;
}
}
}
std::cout << weight << "\n" << ret.size() << "\n";
for (int i = 0; i < ret.size(); ++i){
std::cout << ret[i] << " ";
}
}