#include <bits/stdc++.h>
using namespace std;
struct Node {
  int key;
  struct Node *left, *right;
};
struct Node* newNode(int key) {
  struct Node* node = new Node;
  node->key = key;
  node->left = node->right = nullptr;
  return node;
};
void inorder(struct Node* root) {
  if (root == nullptr) {
    return;
  }
  cout << root->key << " ";
  inorder(root->left);
  inorder(root->right);
}
void inputTree(struct Node*& root, int n) {
  struct Node *parent, *child;
  map<int, struct Node*> mp;
  int n1, n2;
  char lr;
  while (n--) {
    cin >> n1 >> n2 >> lr;
    if (mp.find(n1) == mp.end()) {
      parent = newNode(n1);
      mp[n1] = parent;
      if (root == nullptr) {
        root = parent;
      }
    } else {
      parent = mp[n1];
    }
    child = newNode(n2);
    if (lr == 'L') {
      parent->left = child;
    } else {
      parent->right = child;
    }
    mp[n2] = child;
  }
}
bool cmp(pair<int, int> a, pair<int, int> b) {
  if (a.second == b.second) {
    return a.first > b.first;
  }
  return a.second < b.second;
}
int main() {
  long long n, m, k;
  cin >> n >> m >> k;
  vector<int> p(n);
  map<int, int> mx;
  for (auto& i : p) {
    cin >> i;
  }
  vector<int> second(n);
  for (int i = 0; i < n; ++i) {
    cin >> second[i];
    if (p[i] > mx[second[i]]) {
      mx[second[i]] = p[i];
    }
  }
  vector<int> c(k);
  int cnt = 0;
  for (auto& i : c) {
    cin >> i;
    if (p[i - 1] != mx[second[i - 1]]) {
      ++cnt;
    }
  }
  cout << cnt;
  return 0;
}
