#include <bits/stdc++.h>
using namespace std;
using namespace rel_ops;
const double PI = acos((double)-1);
int ts, ts2, ts3, ts4;
int n, m;
long long gcd(long long x, long long y) {
  long long t;
  for (; y != 0;) {
    t = x % y;
    x = y;
    y = t;
  }
  return x;
}
double sqr(double x) { return x * x; }
template <class T>
void mn(T &x, T y) {
  x = min(x, y);
}
template <class T>
void mx(T &x, T y) {
  x = max(x, y);
}
char s[10000005];
int sn;
struct segTree {
  struct node {
    int l, r, v;
  } a[3000000 * 4];
  void create(int k, int l, int r) {
    a[k].l = l, a[k].r = r;
    a[k].v = 0;
    a[k].v = r - l + 1;
    int mid = (a[k].l + a[k].r) / 2;
    if (l == r) return;
    create(k * 2, l, mid);
    create(k * 2 + 1, mid + 1, r);
  }
  int update(int k, int p) {
    int mid = (a[k].l + a[k].r) / 2;
    a[k].v--;
    if (a[k].l == a[k].r) return a[k].l;
    if (a[k * 2].v >= p)
      return update(k * 2, p);
    else
      return update(k * 2 + 1, p - a[k * 2].v);
  }
  int ask(int k, int p) {
    int mid = (a[k].l + a[k].r) / 2;
    if (a[k].l == a[k].r) return a[k].l;
    if (a[k * 2].v >= p)
      return ask(k * 2, p);
    else
      return ask(k * 2 + 1, p - a[k * 2].v);
  }
} q;
int fa[5000005], x[500005], y[500005];
int main() {
  int i, j, k, l, t1, t2, t3, t4, t5, t6, t7, t8, t9, t, nw;
  int tt1, tt2, tt3, tt4;
  double u1, u2, u3, u4, u5, u6, u7, u8, u9;
  char c1, c2, c3;
  srand((unsigned)time(0));
  s[0] = ' ';
  scanf("%s", s + 1);
  sn = strlen(s + 1);
  scanf("%d%d", &m, &n);
  for (i = 1; i <= n; i++) {
    scanf("%d%d", &x[i], &y[i]);
  }
  q.create(1, 1, m);
  int &totv = q.a[1].v;
  for (i = n; i >= 1; i--) {
    if (totv <= y[i]) continue;
    int st = x[i] == y[i] ? x[i] : x[i] + 1;
    for (j = 1; j <= y[i] - x[i] + 1 && totv > y[i]; j++) {
      t1 = q.update(1, y[i] + 1);
      t2 = q.ask(1, st);
      fa[t1] = t2;
      st = st + 2;
      if (st >= y[i] + 1) st = x[i];
    }
  }
  t1 = 0;
  static char ans[5000005];
  for (i = 1; i <= m; i++) {
    c1 = 0;
    if (!fa[i])
      c1 = ans[i] = s[++t1];
    else
      c1 = ans[i] = ans[fa[i]];
  }
  puts(ans + 1);
  return 0;
}
