#include <bits/stdc++.h>
using namespace std;
const int N = 3000000 + 5;
const int Q = 5000 + 5;
inline void getint(int& num) {
  char c;
  bool flag = 0;
  num = 0;
  while ((c = getchar()) < '0' || c > '9')
    if (c == '-') flag = 1;
  while (c >= '0' && c <= '9') {
    num = num * 10 + c - 48;
    c = getchar();
  }
  if (flag) num = -num;
}
char str[N];
int n, k, l[Q], r[Q], fa[N];
namespace seg {
int sz[N << 2];
void Init(int x, int l, int r) {
  sz[x] = r - l + 1;
  if (l == r) return;
  Init(x << 1, l, ((l + r) >> 1));
  Init(x << 1 | 1, ((l + r) >> 1) + 1, r);
}
void visit(int x, int l, int r, int p) {
  sz[x]--;
  if (l == r) return;
  if (p <= ((l + r) >> 1))
    visit(x << 1, l, ((l + r) >> 1), p);
  else
    visit(x << 1 | 1, ((l + r) >> 1) + 1, r, p);
}
int getps(int x, int l, int r, int k) {
  if (l == r) return l;
  if (sz[x << 1] >= k)
    return getps(x << 1, l, ((l + r) >> 1), k);
  else
    return getps(x << 1 | 1, ((l + r) >> 1) + 1, r, k - sz[x << 1]);
}
int getrk(int x, int l, int r, int k) {
  if (l > k)
    return 0;
  else if (r <= k)
    return sz[x];
  else
    return getrk(x << 1, l, ((l + r) >> 1), k) +
           getrk(x << 1 | 1, ((l + r) >> 1) + 1, r, k);
}
}  // namespace seg
int root(int x) {
  if (!fa[x]) return x;
  return fa[x] = root(fa[x]);
}
void merge(int a, int b) {
  a = seg::getps(1, 1, k, a);
  b = seg::getps(1, 1, k, b);
  int ra = root(a), rb = root(b);
  if (ra > rb) swap(ra, rb);
  fa[rb] = ra;
}
int main() {
  scanf("%s", str + 1);
  getint(k), getint(n);
  for (int i = 1; i <= n; i++) getint(l[i]), getint(r[i]);
  seg::Init(1, 1, k);
  for (int i = n; i; i--) {
    if (r[i] >= seg::sz[1]) continue;
    int pos = r[i] + 1;
    for (int j = l[i] + 1; j <= r[i]; j += 2) {
      if (pos > seg::sz[1]) break;
      merge(j, pos++);
    }
    for (int j = l[i]; j <= r[i]; j += 2) {
      if (pos > seg::sz[1]) break;
      merge(j, pos++);
    }
    int ed = min(seg::sz[1], 2 * r[i] - l[i] + 1);
    for (int j = ed; j > r[i]; j--) {
      int ps = seg::getps(1, 1, k, j);
      seg::visit(1, 1, k, ps);
    }
  }
  for (int i = 1; i <= k; i++) {
    int p = seg::getrk(1, 1, k, root(i));
    putchar(str[p]);
  }
  putchar(10);
}
