#include <bits/stdc++.h>
using namespace std;
typedef list<pair<char *, int> >::iterator iter;
list<pair<char *, int> > block;
int l[5000], r[5000];
char str[3000001];
void fill(int l, int r, int len, int odd, char *buf, int &cnt) {
  int tot = 0, now = 0;
  bool flag = false;
  for (iter p = block.begin(); p != block.end(); p++) {
    if (!flag) {
      if (tot <= l && tot + p->second > l) {
        flag = true;
        for (int j = l - tot; j < p->second; j++) {
          if (now % 2 == odd) buf[cnt++] = p->first[j];
          now++;
          if (now == r - l || cnt >= len) return;
        }
      } else {
        tot += p->second;
      }
    } else {
      for (int j = 0; j < p->second; j++) {
        if (now % 2 == odd) buf[cnt++] = p->first[j];
        now++;
        if (now == r - l || cnt >= len) return;
      }
    }
  }
}
int main() {
  int k, n;
  scanf("%s%d%d", str, &k, &n);
  for (int i = 0; i < n; i++) {
    scanf("%d%d", &l[i], &r[i]);
    l[i]--;
  }
  int cur = k;
  vector<pair<int, int> > op;
  for (int i = n - 1; i >= 0; i--) {
    int l0 = r[i], r0 = 2 * r[i] - l[i];
    if (l0 < cur) {
      if (r0 > cur) r0 = cur;
      cur -= r0 - l0;
      op.push_back(make_pair(i, r0));
    }
  }
  block.insert(block.end(), make_pair(str, cur));
  for (int i = op.size() - 1; i >= 0; i--) {
    int x = op[i].first, l0 = r[x], r0 = op[i].second;
    char *buf = new char[r0 - l0];
    int cnt = 0;
    fill(l[x], r[x], r0 - l0, 1, buf, cnt);
    if (cnt < r0 - l0) fill(l[x], r[x], r0 - l0, 0, buf, cnt);
    int tot = 0;
    iter p = block.begin();
    while (p != block.end()) {
      if (tot <= l0 && l0 < tot + p->second) break;
      tot += p->second;
      p++;
    }
    if (l0 == tot) {
      block.insert(p, make_pair(buf, r0 - l0));
      continue;
    }
    block.insert(p, make_pair(p->first, l0 - tot));
    iter q =
        block.insert(p, make_pair(p->first + l0 - tot, p->second - (l0 - tot)));
    block.erase(p);
    block.insert(q, make_pair(buf, r0 - l0));
  }
  for (iter p = block.begin(); p != block.end(); p++)
    for (int i = 0; i < p->second; i++) printf("%c", p->first[i]);
  printf("\n");
  return 0;
}
