#include <bits/stdc++.h>
using namespace std;
struct SPLAY {
  int root = 0, tot = 0;
  struct node {
    int son[2], par;
    int sz, tsz, v;
    void init(int _v = 0, int _sz = 0) {
      v = _v;
      tsz = sz = _sz;
      son[0] = son[1] = par = 0;
    }
  } tr[200005];
  void push_up(int x) {
    tr[x].tsz = tr[x].sz + tr[tr[x].son[0]].tsz + tr[tr[x].son[1]].tsz;
  }
  int chk(int x) { return tr[tr[x].par].son[1] == x; }
  void rot(int x) {
    int y = tr[x].par, z = tr[y].par, k = chk(x), w = tr[x].son[k ^ 1];
    tr[y].son[k] = w;
    tr[w].par = y;
    tr[z].son[chk(y)] = x;
    tr[x].par = z;
    tr[x].son[k ^ 1] = y;
    tr[y].par = x;
    push_up(y);
  }
  void splay(int x, int goal) {
    while (tr[x].par != goal) {
      int y = tr[x].par, z = tr[y].par;
      if (z != goal) {
        if (chk(x) == chk(y))
          rot(y);
        else
          rot(x);
      }
      rot(x);
    }
    if (!goal) root = x;
    push_up(x);
  }
  void insert(int v, int sz) {
    int p = root, ff = 0;
    while (p && tr[p].v != v) {
      ff = p;
      p = tr[p].son[v > tr[p].v];
    }
    if (p) {
      tr[p].sz += sz;
    } else {
      p = ++tot;
      if (ff) tr[ff].son[v > tr[ff].v] = p;
      tr[p].init(v, sz);
      tr[p].par = ff;
    }
    splay(p, 0);
  }
  int count(int v) {
    insert(v, 1);
    int re = tr[tr[root].son[1]].tsz;
    insert(v, -1);
    return re;
  }
} V[2];
int n, m, p[200005], s[200005], b[200005], inc[200005], pref[200005],
    ans[200005];
int cnt = 0, tot = 0;
struct node {
  int v, id, kd;
} A[200005 * 4];
bool cmp(node x, node y) {
  if (x.v == y.v) return x.kd < y.kd;
  return x.v < y.v;
}
void add(int v, int id, int kd) {
  A[++tot].v = v;
  A[tot].id = id;
  A[tot].kd = kd;
}
int main() {
  cin >> n >> m;
  for (int i = 1; i <= n; i++) scanf("%d", &p[i]), add(p[i], i, 1);
  for (int i = 1; i <= n; i++) scanf("%d", &s[i]), add(s[i], i, 3);
  for (int i = 1; i <= n; i++) scanf("%d", &b[i]);
  for (int i = 1; i <= m; i++) scanf("%d", &inc[i]), add(inc[i], i, 2);
  for (int i = 1; i <= m; i++) scanf("%d", &pref[i]);
  sort(A + 1, A + tot + 1, cmp);
  for (int i = 1; i <= tot; i++) {
    int id = A[i].id;
    if (A[i].kd == 1) {
      cnt++;
      V[0].insert(b[id] + p[id], 1);
      V[1].insert(p[id] - b[id], 1);
    } else if (A[i].kd == 2) {
      ans[id] =
          cnt - V[0].count(inc[id] + pref[id]) - V[1].count(inc[id] - pref[id]);
    } else {
      cnt--;
      V[0].insert(b[id] + p[id], -1);
      V[1].insert(p[id] - b[id], -1);
    }
  }
  for (int i = 1; i <= m; i++) printf("%d ", ans[i]);
}
