#include <bits/stdc++.h>
using namespace std;
const long long INF = 1LL << 60;
int in() {
  char c;
  bool g = false;
  while (c = getchar(), c < '0' || c > '9')
    if (c == '-')
      g = true;
    else
      g = false;
  int x = 0;
  while (c >= '0' && c <= '9') {
    x = x * 10 + c - 48;
    c = getchar();
  }
  return g ? -x : x;
}
void out(int x) {
  int len = 0, data[30];
  while (x) {
    data[len++] = x % 10;
    x /= 10;
  }
  if (!len) data[len++] = 0;
  if (data[0] != abs(data[0])) putchar('-');
  while (len--) putchar(abs(data[len]) + 48);
  putchar('\n');
}
const long long N = 100100;
long long a[N], b[N], q[N], n, k, l, dp[(1 << 21)], d[30][N], bg, ed;
bool vis[N], ans[N];
int main() {
  n = in() + 1, k = in(), l = in();
  while (k--) ans[in()]++;
  k++;
  for (int i = 0; i < l; i++) a[i] = in();
  for (int i = 0; i < n; i++) ans[i] = ans[i] ^ ans[i + 1];
  for (int i = 0; i < n; i++)
    if (ans[i]) b[k++] = i;
  for (int t = 0; t < k; t++) {
    for (int i = 0; i < n; i++) d[t][i] = INF, vis[i] = false;
    d[t][b[t]]++;
    bg = ed = 0;
    q[ed++] = b[t];
    d[t][b[t]] = 0;
    while (ed > bg) {
      int u = q[bg++];
      for (int i = 0; i < l; i++) {
        if (u < n - a[i] && !vis[u + a[i]]++)
          q[ed++] = u + a[i],
          ((d[t][u + a[i]]) = min((d[t][u + a[i]]), (d[t][u] + 1)));
        if (u >= a[i] && !vis[u - a[i]]++)
          q[ed++] = u - a[i],
          ((d[t][u - a[i]]) = min((d[t][u - a[i]]), (d[t][u] + 1)));
      }
    }
  }
  for (int mask = 0; mask < (1 << k); mask++)
    if (!mask)
      dp[mask] = 0;
    else {
      dp[mask] = INF;
      for (int i = 0; i < k; i++)
        for (int j = i + 1; j < k; j++)
          if ((mask >> i) & (mask >> j) & 1)
            ((dp[mask]) = min((dp[mask]),
                              (dp[mask ^ (1 << i) ^ (1 << j)] + d[i][b[j]])));
    }
  if (dp[(1 << k) - 1] >= INF)
    cout << -1 << endl;
  else
    cout << dp[(1 << k) - 1] << endl;
  return 0;
}
