#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e4 + 5;
int a[maxn], b[maxn], n, l, k, x[maxn];
vector<int> v;
int d[20][maxn];
void enter() {
  cin >> n >> k >> l;
  for (int i = 0; i < k; ++i) {
    int u;
    cin >> u;
    a[u + 1] ^= 1, a[u] ^= 1;
  }
  for (int i = 1; i <= l; ++i) cin >> b[i];
}
int dp[1 << 20];
const int inf = 1e9;
void BFS(int st, int d[maxn]) {
  queue<int> q;
  q.push(st);
  fill_n(d, maxn, inf);
  d[st] = 0;
  while (!q.empty()) {
    int u = q.front();
    q.pop();
    for (int i = 1; i <= l; ++i) {
      for (int j = -1; j <= 1; ++j) {
        int nx = u + b[i] * j;
        if (nx > 0 && nx <= n + 1 && d[nx] == inf) d[nx] = d[u] + 1, q.push(nx);
      }
    }
  }
}
void solve() {
  for (int i = 1; i <= n + 1; ++i)
    if (a[i] == 1) BFS(i, d[v.size()]), v.push_back(i);
  int sz = v.size();
  fill_n(dp, 1 << sz, inf);
  dp[0] = 0;
  for (int i = 0; i < (1 << sz); ++i) {
    for (int j = 0; j < sz; ++j) {
      if ((i >> j) & 1) continue;
      for (int k = j + 1; k < sz; ++k) {
        if ((i >> k) & 1) continue;
        int& res = dp[i | (1 << j) | (1 << k)];
        res = min(res, dp[i] + d[j][v[k]]);
      }
    }
  }
  if (dp[(1 << sz) - 1] == inf)
    cout << -1;
  else
    cout << dp[(1 << sz) - 1];
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  if (fopen("TEST"
            ".INP",
            "r"))
    freopen(
        "TEST"
        ".INP",
        "r", stdin),
        freopen(
            "TEST"
            ".OUT",
            "w", stdout);
  enter();
  solve();
}
