int n;
vector<int> arr(102);
vector<int> likes(102);
vector<int> need(102);
vector<vector<int>> g(102, vector<int>());
vector<int> colors(102);
bool isOk = false;
void dfs(int v, int need) {
colors[v] = 1;
if (v == need)
isOk = true;
for (int to : g[v]) {
if (colors[to] == 0) {
dfs(to, need);
}
}
}
void createGraph() {
for (int i = 1; i <= n; i++) {
if (i + likes[i] <= n) {
g[i].push_back(i + likes[i]);
g[i + likes[i]].push_back(i);
}
if (i - likes[i] >= 1) {
g[i].push_back(i - likes[i]);
g[i - likes[i]].push_back(i);
}
}
}
int main() {
cin >> n;
for (int i = 1; i <= n; i++) {
int a;
cin >> a;
arr[i] = i;
need[i] = a;
}
for (int i = 1; i <= n; i++)
{
int a;
cin >> a;
likes[i] = a;
}
createGraph();
for (int i = 1; i <= n; i++) {
colors.assign(n + 1, 0);
isOk = false;
dfs(i,need[i]);
if (!isOk) {
cout << "NO";
return 0;
}
}
cout << "YES";
return 0;
}