#include <bits/stdc++.h>
using namespace std;
const int maxN = 111;
int a[maxN];
vector<int> edges[maxN];
bool mark[maxN];
void dfs(int u, vector<int> &e) {
  mark[u] = true;
  e.push_back(u);
  for (int i = 0; i < edges[u].size(); i++) {
    int v = edges[u][i];
    if (!mark[v]) {
      dfs(v, e);
    }
  }
}
int main() {
  int n;
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    scanf("%d", a + i);
  }
  for (int i = 1; i <= n; i++) {
    int d;
    scanf("%d", &d);
    if (i - d > 0) {
      edges[i - d].push_back(i);
      edges[i].push_back(i - d);
    }
    if (i + d <= n) {
      edges[i + d].push_back(i);
      edges[i].push_back(i + d);
    }
  }
  memset(mark, false, sizeof(mark));
  for (int i = 1; i <= n; i++) {
    if (!mark[i]) {
      vector<int> e, v;
      dfs(i, e);
      sort(e.begin(), e.end());
      for (int i = 0; i < e.size(); i++) {
        v.push_back(a[e[i]]);
      }
      sort(v.begin(), v.end());
      if (v != e) {
        puts("NO");
        return 0;
      }
    }
  }
  puts("YES");
  return 0;
}
