#include <bits/stdc++.h>
using namespace std;
const int N = 1e4 + 10;
int t, cnt, n, m, k, dis[N], a[N], tr[N], g[25][25], cf[N], cf2[N], dp[3048576];
void bfs(int s) {
  for (int i = 1; i <= n + 1; i++) dis[i] = 0x3f3f3f3f;
  queue<int> q;
  dis[s] = 0;
  q.push(s);
  while (!q.empty()) {
    int u = q.front();
    q.pop();
    for (int i = 1; i <= m; i++) {
      int v1 = u + a[i];
      if (v1 <= n + 1 && dis[v1] == 0x3f3f3f3f) {
        dis[v1] = dis[u] + 1;
        q.push(v1);
      }
      int v2 = u - a[i];
      if (v2 >= 1 && dis[v2] == 0x3f3f3f3f) {
        dis[v2] = dis[u] + 1;
        q.push(v2);
      }
    }
  }
  for (int i = 1; i <= n + 1; i++)
    if (tr[i] != -1) g[tr[s]][tr[i]] = dis[i];
}
int main() {
  scanf("%d%d%d", &n, &k, &m);
  for (int i = 1; i <= k; i++) {
    scanf("%d", &t);
    cf2[t] = 1;
  }
  for (int i = 1; i <= m; i++) scanf("%d", &a[i]);
  for (int i = 1; i <= n + 1; i++) cf[i] = cf2[i] ^ cf2[i - 1];
  cnt = -1;
  for (int i = 1; i <= n + 1; i++) tr[i] = -1;
  for (int i = 1; i <= n + 1; i++)
    if (cf[i]) tr[i] = ++cnt;
  for (int i = 1; i <= n + 1; i++)
    if (cf[i]) bfs(i);
  for (int i = 1; i < (1 << (cnt + 1)); i++) dp[i] = 0x3f3f3f3f;
  for (int i = 0; i < (1 << (cnt + 1)); i++) {
    if (dp[i] == 0x3f3f3f3f) continue;
    for (int j = 0; j <= cnt; j++) {
      if ((i >> j) & 1) continue;
      for (int k = j + 1; k <= cnt; k++)
        if (((i >> k) & 1) == 0)
          dp[i + (1 << j) + (1 << k)] =
              min(dp[i + (1 << j) + (1 << k)], dp[i] + g[j][k]);
    }
  }
  printf("%d", (dp[(1 << (cnt + 1)) - 1] == 0x3f3f3f3f)
                   ? -1
                   : dp[(1 << (cnt + 1)) - 1]);
  return 0;
}
