#include <bits/stdc++.h>
using namespace std;
const int maxn = 500005;
int C[maxn];
struct Node {
  int x, y, z;
} node[maxn];
int vec[maxn];
bool cmp(const Node &x, const Node &y) { return x.x > y.x; }
int n, tot;
void add(int x, int v) {
  while (x <= n) {
    C[x] = max(C[x], v);
    x += x & (-x);
  }
}
int sum(int x) {
  int res = -1;
  while (x > 0) {
    res = max(res, C[x]);
    x -= x & (-x);
  }
  return res;
}
void make() {
  int i;
  sort(vec, vec + tot);
  tot = unique(vec, vec + tot) - vec;
  for (i = 0; i < n; i++)
    node[i].y = tot - (lower_bound(vec, vec + tot, node[i].y) - vec);
}
int main() {
  scanf("%d", &n);
  tot = n;
  int i, j, k;
  for (i = 0; i < n; i++) scanf("%d", &node[i].x);
  for (i = 0; i < n; i++) {
    scanf("%d", &node[i].y);
    vec[i] = node[i].y;
  }
  for (i = 0; i < n; i++) scanf("%d", &node[i].z);
  make();
  sort(node, node + n, cmp);
  memset(C, -1, sizeof(C));
  int res = 0;
  for (i = 0; i < n; i = j) {
    for (j = i; j < n && node[i].x == node[j].x; j++) {
      int t = sum(node[j].y - 1);
      if (t > node[j].z) res++;
    }
    for (k = i; k < j; k++) {
      add(node[k].y, node[k].z);
    }
  }
  printf("%d\n", res);
}
