#include <bits/stdc++.h>
using namespace std;
const int N = 5005, K = 3e6 + 15;
int k, n, f[K], stlen, stpre, stdel, to[K], from[K], idt, idf, ans[K], id, t;
string str;
char Ans[K];
struct Seg {
  int l, r;
} c[K], d[K];
inline int find(int l) {
  if (f[l] == l) return l;
  return f[l] = find(f[l]);
}
inline int findans(int l) {
  if (ans[l] == l) return l;
  return ans[l] = findans(ans[l]);
}
int main() {
  ios::sync_with_stdio(false);
  cin >> str >> k >> n;
  stlen = k;
  for (int i = 1; i <= n; ++i) cin >> c[i].l >> c[i].r;
  for (int i = n; i >= 1; --i) {
    d[i].l = c[i].r + 1;
    d[i].r = d[i].l + c[i].r - c[i].l;
    if (d[i].l > stlen) {
      d[i].l = d[i].r = -1;
      continue;
    }
    d[i].r = min(d[i].r, stlen);
    stlen -= d[i].r - d[i].l + 1;
  }
  for (int i = 1; i <= k; ++i) f[i] = ans[i] = i;
  for (int i = n; i >= 1; --i) {
    if (d[i].l == -1 && d[i].r == -1) continue;
    stpre = c[i].l;
    stdel = d[i].l;
    idt = idf = 0;
    for (int j = i + 1; j <= n; ++j) {
      if (c[j].r < stpre) stpre += d[j].r - d[j].l + 1;
      if (c[j].r < stdel) stdel += d[j].r - d[j].l + 1;
    }
    for (int j = 1; j <= min(c[i].r - c[i].l + 1, 2 * (d[i].r - d[i].l + 1));
         ++j) {
      stpre = find(stpre);
      from[++idf] = stpre;
      stpre++;
    }
    for (int j = 2; j <= idf; j += 2) to[++idt] = from[j];
    for (int j = 1; j <= idf; j += 2) to[++idt] = from[j];
    for (int j = 1; j <= d[i].r - d[i].l + 1; ++j) {
      stdel = find(stdel);
      ans[stdel] = to[j];
      f[stdel] = stdel + 1;
      stdel++;
    }
  }
  int pos = 0;
  for (int i = 1; i <= k; ++i)
    if (findans(i) == i) Ans[i] = str[pos++];
  for (int i = 1; i <= k; ++i) cout << Ans[findans(i)];
  cout << endl;
  return 0;
}
