#include <bits/stdc++.h>
using namespace std;
const int oo = 1000000009;
const double eps = 1e-6;
const int mod = 1000000007;
const int mx_n = 10010;
const int mx_l = 102, mx_k = 10;
int dist[2 * mx_k][2 * mx_k], n;
int a[mx_l], l;
int x[mx_k], k;
int dp[(1 << (2 * mx_k))];
vector<int> pos;
int bits[mx_n];
int d[mx_n];
void bfs(int s) {
  for (int i = 0; i < (mx_n); ++i) d[i] = oo;
  d[pos[s]] = 0;
  queue<pair<int, int> > q;
  q.push(make_pair(pos[s], 0));
  while (!q.empty()) {
    pair<int, int> cur = q.front();
    q.pop();
    for (int i = 0; i < (l); ++i) {
      for (int dx = -1; dx <= 1; dx += 2) {
        int nx = cur.first + dx * a[i];
        if (nx >= 0 && nx <= n && d[nx] == oo) {
          d[nx] = 1 + cur.second;
          q.push(make_pair(nx, 1 + cur.second));
        }
      }
    }
  }
  for (int i = 0; i < ((int)(pos.size())); ++i) dist[s][i] = d[pos[i]];
}
int main() {
  scanf("%d %d %d", &n, &k, &l);
  for (int i = 0; i < (k); ++i) {
    scanf("%d", x + i);
    bits[x[i]] = 1;
  }
  for (int i = 0; i < (l); ++i) scanf("%d", a + i);
  for (int i = 0; i <= (n); ++i)
    if (bits[i] != bits[i + 1]) pos.push_back(i);
  for (int i = 0; i < ((int)(pos.size())); ++i) {
    bfs(i);
    for (int j = 0; j < ((int)(pos.size())); ++j)
      ;
    ;
  }
  dp[0] = 0;
  for (int mask = 1; mask < ((1 << (int)(pos.size()))); ++mask) {
    dp[mask] = oo;
    for (int i = 0; i < ((int)(pos.size())); ++i)
      if (mask & (1 << i)) {
        for (int j = i + 1; j < ((int)(pos.size())); ++j)
          if (mask & (1 << j)) {
            dp[mask] =
                min(dp[mask], dp[mask ^ (1 << i) ^ (1 << j)] + dist[i][j]);
          }
      }
  }
  int ans = dp[(1 << (int)(pos.size())) - 1];
  if (ans == oo) ans = -1;
  printf("%d\n", ans);
  return 0;
}
