#include <bits/stdc++.h>
using namespace std;
const int N = 10005;
int n, kk, l, a[N], num[N], dis[25][25], id[N], idx, pos[N], d[N], lg[1 << 20];
vector<int> v[N];
void bfs(int pos) {
  memset(d, 63, sizeof(d));
  d[pos] = 0;
  queue<int> q;
  q.push(pos);
  while (!q.empty()) {
    int nd = q.front();
    q.pop();
    for (auto &i : v[nd])
      if (d[i] > d[nd] + 1) d[i] = d[nd] + 1, q.push(i);
  }
  for (int i = 1; i <= n; i++)
    if (id[i] != -1) dis[id[pos]][id[i]] = d[i];
}
int dp[1 << 20];
inline int lowbit(int x) { return x & -x; }
int main() {
  ios::sync_with_stdio(false);
  cin >> n >> kk >> l;
  int tmp;
  for (int i = 1; i <= kk; i++) {
    cin >> tmp;
    num[tmp] ^= 1;
  }
  for (int i = 1; i <= l; i++) cin >> a[i];
  memset(id, -1, sizeof(id));
  ++n;
  for (int i = 1; i <= n; i++) {
    if (num[i] ^ num[i - 1]) id[i] = idx, pos[idx] = i, idx++;
  }
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= l; j++)
      if (i + a[j] <= n) v[i].push_back(i + a[j]), v[i + a[j]].push_back(i);
  for (int i = 0; i < idx; i++) bfs(pos[i]);
  int lim = 1 << idx;
  for (int i = 2; i < lim; i++) lg[i] = lg[i >> 1] + 1;
  memset(dp, 63, sizeof(dp));
  int inf = dp[0];
  dp[0] = 0;
  for (int i = 1; i < lim; i++) {
    int t = lg[lowbit(i)];
    for (int j = t + 1; j < idx; j++)
      if (i & (1 << j))
        dp[i] = min(dp[i], dp[i ^ (1 << t) ^ (1 << j)] + dis[t][j]);
  }
  cout << (dp[lim - 1] == inf ? -1 : dp[lim - 1]) << endl;
  return 0;
}
