#include <bits/stdc++.h>
using namespace std;
const int maxn = 30000;
int q[maxn], val[maxn], b[maxn], n, k, l, dp[1 << 21], D[21][21], dist[maxn];
vector<int> g[maxn], ones;
int main() {
  scanf("%d%d%d", &n, &k, &l);
  for (int i = 0; i < k; ++i) {
    int x;
    scanf("%d", &x);
    val[x] = 1;
  }
  for (int i = 0; i <= n; ++i) b[i] = (val[i] != val[i + 1]);
  for (int i = 0; i < l; ++i) {
    int x;
    scanf("%d", &x);
    for (int i = 0; i + x <= n; ++i) {
      g[i].push_back(i + x);
      g[i + x].push_back(i);
    }
  }
  for (int i = 0; i <= n; ++i)
    if (b[i]) ones.push_back(i);
  int nn = ones.size();
  for (int i = 0; i < nn; ++i) {
    int v = ones[i];
    int head = 0, tail = 0;
    memset(dist, -1, sizeof(dist));
    q[tail++] = v;
    dist[v] = 0;
    while (head != tail) {
      int v = q[head++];
      for (typeof(g[v].begin()) it = g[v].begin(); it != g[v].end(); ++it) {
        int to = *it;
        if (dist[to] == -1) {
          q[tail++] = to;
          dist[to] = dist[v] + 1;
        }
      }
    }
    for (int j = 0; j < nn; ++j)
      if (dist[ones[j]] != -1)
        D[i][j] = dist[ones[j]];
      else
        D[i][j] = 1e9;
  }
  for (int i = 0; i < (1 << nn); ++i) dp[i] = 1e9;
  dp[0] = 0;
  for (int mask = 0; mask < (1 << nn); ++mask) {
    int pos = -1;
    for (int i = 0; i < nn; ++i)
      if ((mask & (1 << i))) {
        pos = i;
        break;
      }
    if (pos != -1)
      for (int i = 0; i < nn; ++i)
        if (i != pos && (mask & (1 << i))) {
          dp[mask] =
              min(dp[mask], dp[mask ^ (1 << pos) ^ (1 << i)] + D[pos][i]);
        }
  }
  if (dp[(1 << nn) - 1] < (int)1e9)
    cout << dp[(1 << nn) - 1];
  else
    puts("-1");
  return 0;
}
