#include <bits/stdc++.h>
using namespace std;
void bfs(int s, bitset<10000 + 5>& panel, int dis[], int a[], int L, int N,
         int id[], int size) {
  fill(dis, dis + size, 1 << 24);
  dis[id[s]] = 0;
  int cal_dis[10000 + 5];
  fill(cal_dis, cal_dis + 10000 + 5, -1);
  cal_dis[s] = 0;
  queue<int> que;
  que.push(s);
  while (!que.empty()) {
    int cur = que.front();
    que.pop();
    for (int i = 0; i < L; ++i) {
      int v = cur + a[i];
      if (v >= N || v == s || cal_dis[v] != -1) continue;
      cal_dis[v] = cal_dis[cur] + 1;
      if (panel[v] == 1) {
        dis[id[v]] = cal_dis[v];
      } else {
        que.push(v);
      }
    }
    for (int i = 0; i < L; ++i) {
      int v = cur - a[i];
      if (v < 0 || v == s || cal_dis[v] != -1) continue;
      cal_dis[v] = cal_dis[cur] + 1;
      if (panel[v] == 1) {
        dis[id[v]] = cal_dis[v];
      } else {
        que.push(v);
      }
    }
  }
}
int dp[1 << 24];
int main() {
  int N, K, L;
  bitset<10000 + 5> panel;
  int x[10 + 5], a[100 + 5];
  cin >> N >> K >> L;
  for (int i = 0; i < K; ++i) {
    cin >> x[i];
    panel[x[i]] = 1;
  }
  for (int i = 0; i < L; ++i) {
    cin >> a[i];
  }
  panel = panel ^ (panel >> 1);
  vector<int> vertices;
  int dis[24][24];
  int id[10000 + 5];
  int size = 0;
  for (int i = 0; i < N + 1; ++i) {
    if (panel[i] == 1) {
      id[i] = size++;
    }
  }
  for (int i = 0; i < N + 1; ++i) {
    if (panel[i] == 1) {
      bfs(i, panel, dis[id[i]], a, L, N + 1, id, size);
    }
  }
  int mask = 1 << size;
  fill(dp, dp + mask, 1 << 24);
  dp[0] = 0;
  for (int i = 3; i < mask; ++i) {
    for (int k = 0; k < size; ++k) {
      if (i & (1 << k)) {
        for (int j = k + 1; j < size; ++j) {
          if (i & (1 << j)) {
            int p = i - (1 << k) - (1 << j);
            if (dp[p] < (1 << 24) && dis[k][j] < (1 << 24)) {
              dp[i] = min(dp[i], dp[p] + dis[k][j]);
            }
          }
        }
      }
    }
  }
  if (dp[mask - 1] < 1 << 24)
    cout << dp[mask - 1] << endl;
  else
    cout << -1 << endl;
  return 0;
}
