#include <bits/stdc++.h>
using namespace std;
template <typename T, typename U>
inline void smin(T &a, U b) {
  if (a > b) a = b;
}
template <typename T, typename U>
inline void smax(T &a, U b) {
  if (a < b) a = b;
}
template <class T>
inline void gn(T &first) {
  char c, sg = 0;
  while (c = getchar(), (c > '9' || c < '0') && c != '-')
    ;
  for ((c == '-' ? sg = 1, c = getchar() : 0), first = 0; c >= '0' && c <= '9';
       c = getchar())
    first = (first << 1) + (first << 3) + c - '0';
  if (sg) first = -first;
}
template <class T, class T1>
inline void gn(T &first, T1 &second) {
  gn(first);
  gn(second);
}
template <class T, class T1, class T2>
inline void gn(T &first, T1 &second, T2 &z) {
  gn(first);
  gn(second);
  gn(z);
}
template <class T>
inline void print(T first) {
  if (first < 0) {
    putchar('-');
    return print(-first);
  }
  if (first < 10) {
    putchar('0' + first);
    return;
  }
  print(first / 10);
  putchar(first % 10 + '0');
}
template <class T>
inline void printsp(T first) {
  print(first);
  putchar(' ');
}
template <class T>
inline void println(T first) {
  print(first);
  putchar('\n');
}
template <class T, class U>
inline void print(T first, U second) {
  printsp(first);
  println(second);
}
template <class T, class U, class V>
inline void print(T first, U second, V z) {
  printsp(first);
  printsp(second);
  println(z);
}
int power(int a, int b, int m, int ans = 1) {
  for (; b; b >>= 1, a = 1LL * a * a % m)
    if (b & 1) ans = 1LL * ans * a % m;
  return ans;
}
char s[4000111];
int B[4000111];
int pre[4000111];
int arr[4000111];
int nn;
int flag[4000111];
int l[5055], r[5055];
int st[5055], ed[5055];
int n, k;
int len[5055];
int find(int u) {
  int now = 0, tmp;
  for (int i = 21; i >= 0; i--) {
    tmp = now + (1 << i);
    if (B[tmp] < u) {
      u -= B[tmp];
      now = tmp;
    }
  }
  return now + 1;
}
void update(int u, int d) {
  while (u < 4000111) {
    B[u] += d;
    u += u & -u;
  }
}
int main() {
  scanf("%s", s + 1);
  cin >> k >> n;
  for (int i = 0; i < n; i++) gn(l[i], r[i]);
  len[n] = k;
  for (int i = n - 1; i >= 0; i--) {
    st[i] = r[i] + 1, ed[i] = min(2 * r[i] - l[i] + 1, len[i + 1]);
    if (st[i] > len[i + 1]) {
      len[i] = len[i + 1];
      ed[i] = st[i] - 1;
    } else {
      len[i] = len[i + 1] - (ed[i] - st[i] + 1);
    }
  }
  for (int i = 1; i <= 4000111 - 1; i++) update(i, 1);
  for (int i = n - 1; i >= 0; i--) {
    nn = 0;
    for (int j = st[i], k = l[i] + 1; j <= ed[i]; j++, k += 2) {
      if (k > r[i]) k = l[i];
      int u = find(j);
      arr[nn++] = u;
      int v = find(k);
      pre[u] = v;
    }
    for (int j = 0; j < nn; j++) update(arr[j], -1);
  }
  for (int i = 1; i <= len[0]; i++) {
    int u = find(i);
    flag[u] = 1;
    pre[u] = i;
  }
  for (int i = 1; i <= k; i++) {
    if (flag[i] == 0) pre[i] = pre[pre[i]];
    putchar(s[pre[i]]);
  }
  puts("");
  return 0;
}
