#include <bits/stdc++.h>
using namespace std;
const int N(5010), K(3000010);
struct Segment {
  int l, t;
  Segment(int _l = 0, int _r = 0) {
    l = _l;
    t = _r - _l + 1;
  }
};
int k, n, m, pl, pr, pi, o, oo, t;
int l[N], r[N];
int q[K], fx[K], fy[K];
char s[K], ans[K];
Segment b[N], c[N];
int find(int x) {
  for (; pr < x; ++pi) {
    pl = pr + 1;
    pr += b[pi + 1].t;
  }
  return b[pi].l + x - pl;
}
void solve() {
  for (int i = n - 1; i != -1; --i) {
    int tt = 0, l1 = 0, r1 = 0, l2 = max(1, r[i] + 1),
        r2 = min(k, 2 * r[i] - l[i] + 1);
    oo = 0;
    for (int j = int(0); j < int(o); ++j) {
      l1 = r1 + 1;
      r1 = l1 + b[j].t - 1;
      int x = max(l1, l2), y = min(r1, r2);
      if (x <= y) {
        if (l1 < x) c[oo++] = Segment(b[j].l, b[j].l + x - l1 - 1);
        if (y < r1)
          c[oo++] =
              Segment(b[j].l + y - l1 + 1, b[j].l + y - l1 + 1 + r1 - y - 1);
      } else
        c[oo++] = b[j];
      for (; x <= y; ++x) q[tt++] = b[j].l + x - l1;
    }
    int len = (r[i] - l[i] + 1) / 2, z = 0, tmp = min(len, tt);
    pl = pr = 0;
    pi = -1;
    for (int j = int(0); j < int(tmp); ++j) {
      fx[t] = q[j];
      fy[t++] = find(l[i] + 2 * j + 1);
    }
    pl = pr = 0;
    pi = -1;
    for (int j = int(tmp); j < int(tt); ++j) {
      fx[t] = q[j];
      fy[t++] = find(l[i] + 2 * (j - tmp));
    }
    o = oo;
    for (int j = int(0); j < int(o); ++j) b[j] = c[j];
    k -= max(0, r2 - l2 + 1);
  }
  pl = pr = 0;
  pi = -1;
  for (int i = int(1); i < int(k + 1); ++i) ans[find(i)] = s[i];
}
int main() {
  scanf("%s%d%d", s + 1, &k, &n);
  m = strlen(s);
  for (int i = int(0); i < int(n); ++i) scanf("%d%d", &l[i], &r[i]);
  b[o++] = Segment(1, k);
  solve();
  for (int i = t - 1; i != -1; --i) ans[fx[i]] = ans[fy[i]];
  printf("%s\n", ans + 1);
  return 0;
}
