#include <bits/stdc++.h>
using namespace std;
bool solve(const vector<int>& hps, const vector<int>& hero, vector<int>& soln,
           int frm, int dir) {
  soln.clear();
  int n = hps.size();
  if (n == 0) return true;
  vector<int> heroes;
  heroes.push_back(0);
  for (int i = 1; i < n; i++) {
    if (hero[i]) heroes.push_back(i);
  }
  int h = heroes.size();
  if (h == 1) {
    if (hero[0]) {
      soln.push_back(frm);
    }
    return true;
  }
  vector<int> dp(h, -1);
  dp[0] = 0;
  for (int i = 1; i < h; i++) {
    int health = hero[heroes[i]];
    assert(health > 0);
    for (int j = i - 1; j >= 0; j--) {
      bool gone = false;
      for (int k = heroes[j + 1] - 1; k >= heroes[j]; k--) {
        health += hps[k];
        if (health < 0) {
          gone = true;
          break;
        }
      }
      if (gone) break;
      if (dp[j] != -1) {
        dp[i] = j;
        break;
      }
    }
  }
  if (dp[h - 1] == -1) return false;
  vector<int> taken(h, 0);
  int x = h - 1;
  while (1) {
    taken[x] = 1;
    if (hero[heroes[x]]) soln.push_back(x);
    if (x == 0) break;
    x = dp[x];
  }
  reverse(soln.begin(), soln.end());
  for (int i = 0; i < h; i++)
    if (!taken[i]) soln.push_back(i);
  for (int& x : soln) {
    x = heroes[x];
    if (dir > 0) {
      x += frm;
    } else {
      x = frm - x;
    }
  }
  return true;
}
const int MAXN = 107;
int heroHealth[MAXN];
int healthPnts[MAXN];
int heroMap[MAXN];
int n;
bool checkDirection(int rp, int dir, int bahir, vector<int>& soln) {
  vector<int> hps;
  vector<int> hero;
  for (int i = rp + bahir * dir; i <= n && i > 0; i += dir) {
    hps.push_back(healthPnts[i]);
    hero.push_back(heroHealth[i]);
  }
  return solve(hps, hero, soln, rp + bahir * dir, dir);
}
bool rally(int rp, vector<int>& soln) {
  soln.clear();
  vector<int> bamsoln;
  vector<int> dansoln;
  bool x = checkDirection(rp, 1, 0, dansoln);
  bool y = checkDirection(rp, -1, 1, bamsoln);
  if (x && y) {
    if (healthPnts[rp] >= 0 || dansoln.size() > 0) {
      for (int g : dansoln) {
        soln.push_back(heroMap[g]);
      }
      for (int g : bamsoln) {
        soln.push_back(heroMap[g]);
      }
      return true;
    }
  }
  if (healthPnts[rp] < 0) {
    x = checkDirection(rp, 1, 1, dansoln);
    y = checkDirection(rp, -1, 0, bamsoln);
    if (x && y && bamsoln.size() > 0) {
      for (int g : bamsoln) {
        soln.push_back(heroMap[g]);
      }
      for (int g : dansoln) {
        soln.push_back(heroMap[g]);
      }
      return true;
    }
  }
  return false;
}
int main() {
  ios_base::sync_with_stdio(false);
  int m;
  cin >> n >> m;
  for (int i = 1; i <= m; i++) {
    int s, h;
    cin >> s >> h;
    heroHealth[s] = h;
    heroMap[s] = i;
  }
  for (int i = 1; i <= n; i++) {
    cin >> healthPnts[i];
  }
  vector<int> soln;
  for (int rp = 1; rp <= n; rp++) {
    if (rally(rp, soln)) {
      cout << rp << endl;
      for (int x : soln) cout << x << ' ';
      return 0;
    }
  }
  cout << -1 << endl;
  return 0;
}
