#include <bits/stdc++.h>
using namespace std;

using VS = vector<string>;    using LL = long long;
using VI = vector<int>;       using VVI = vector<VI>;
using PII = pair<int, int>;   using PLL = pair<LL, LL>;
using VL = vector<LL>;        using VVL = vector<VL>;

#define ALL(a)  begin((a)),end((a))
#define RALL(a) (a).rbegin(), (a).rend()
#define PB push_back
#define EB emplace_back
#define MP make_pair
#define SZ(a) int((a).size())
#define SORT(c) sort(ALL((c)))
#define RSORT(c) sort(RALL((c)))
#define UNIQ(c) (c).erase(unique(ALL((c))), end((c)))
#define FOR(i, s, e) for (int(i) = (s); (i) < (e); (i)++)
#define FORR(i, s, e) for (int(i) = (s); (i) > (e); (i)--)
#define debug(x) cerr << #x << ": " << x << endl
const int INF = 1e9;                          const LL LINF = 1e16;
const LL MOD = 1000000007;                    const double PI = acos(-1.0);
int DX[8] = { 0, 0, 1, -1, 1, 1, -1, -1 };    int DY[8] = { 1, -1, 0, 0, 1, -1, 1, -1 };

/* -----  2018/01/14  Problem: AOJ 2266 / Link: http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2266  ----- */
/* ------問題------



-----問題ここまで----- */
/* -----解説等-----


DPにも貪欲にもできないので最小費用流なのは何となく分かるんだけど
それ以上は全く何もわからないため答えを見た。



----解説ここまで---- */


/* 最小費用流 負辺もいける */
typedef long long PD_Type;
const PD_Type PD_INF = 1 << 30;

struct Primal_Dual
{
	typedef pair< PD_Type, int > pii;

	struct edge
	{
		int to, rev;
		PD_Type	cap, cost;
		edge() {}
		edge(int to, PD_Type cap, PD_Type cost, int rev) :to(to), cap(cap), cost(cost), rev(rev) {}

	};
	vector< vector< edge > > graph;
	vector< int > prevv, preve;
	vector< PD_Type > potential, min_cost;
	Primal_Dual(int V) : graph(V) {}

	void add_edge(int from, int to, PD_Type cap, PD_Type cost)
	{
		graph[from].push_back(edge(to, cap, cost, (int)graph[to].size()));
		graph[to].push_back(edge(from, 0, -cost, (int)graph[from].size() - 1));
	}

	PD_Type min_cost_flow(int s, int t, int f)
	{
		int V = graph.size();
		PD_Type ret = 0;
		priority_queue< pii, vector< pii >, greater< pii > > que;
		potential.assign(V, 0);
		preve.assign(V, -1);
		prevv.assign(V, -1);

		//一回だけbellmanfordで最初のポテンシャルを求める
		FOR(k, 0, V) {
			FOR(i, 0, V) {
				FOR(j, 0, (int)graph[i].size()) {
					edge &e = graph[i][j];
					if (e.cap == 0)continue; // 誤差注意
					potential[e.to] = min(potential[e.to], potential[i] + e.cost);
				}
			}
		}


		while (f > 0) {
			min_cost.assign(V, PD_INF);
			que.push(pii(0, s));
			min_cost[s] = 0;

			while (!que.empty()) {
				pii p = que.top();
				que.pop();
				if (min_cost[p.second] < p.first) continue;
				for (int i = 0; i < (int)graph[p.second].size(); i++) {
					edge &e = graph[p.second][i];
					PD_Type nextCost = min_cost[p.second] + e.cost + potential[p.second] - potential[e.to];
					if (e.cap > 0 && min_cost[e.to] > nextCost) {
						min_cost[e.to] = nextCost;
						prevv[e.to] = p.second, preve[e.to] = i;
						que.push(pii(min_cost[e.to], e.to));
					}
				}
			}
			if (min_cost[t] == PD_INF) return -1;
			for (int v = 0; v < V; v++) potential[v] += min_cost[v];
			PD_Type addflow = f;
			for (int v = t; v != s; v = prevv[v]) {
				addflow = min(addflow, graph[prevv[v]][preve[v]].cap);
			}
			f -= addflow;
			ret += addflow * potential[t];
			for (int v = t; v != s; v = prevv[v]) {
				edge &e = graph[prevv[v]][preve[v]];
				e.cap -= addflow;
				graph[v][e.rev].cap += addflow;
			}
		}
		return ret;
	}
};
// Primal_Dual mnf(仕様頂点数), mnf.add_edge(a,b,cap,cost), mnf.min_cost_flow(s,t,f)
LL N,M,K;

LL ans = 0LL;

int main() {
	cin.tie(0);
	ios_base::sync_with_stdio(false);

	cin >> M>>N>>K;
	Primal_Dual F(K);
	VL a(N);
	FOR(i, 0, N) {
		cin >> a[i];
	}
	VVI B(10004,VI());
	LL sum = 0;
	FOR(i, 0, K) {
		int aa; cin >> aa; aa--;
		B[aa].push_back(i);
		sum += a[aa];
	}

	FOR(i, 0, N) {
		if (SZ(B[i]) <= 1)continue;
		FOR(j, 0, SZ(B[i]) - 1) {
			int n1 = B[i][j], n2 = B[i][j + 1];
			if (n1 + 1 != n2)F.add_edge(n1 + 1, n2, 1, -a[i]);
			else sum -= a[i];
		}
	}
	FOR(i, 0, K - 1)F.add_edge(i,i+1,M,0);
	ans = sum + F.min_cost_flow(0, K - 1, M - 1);
	cout << ans << "\n";

	return 0;
}



Measured memory_bytes: 5292