#include <bits/stdc++.h>   using namespace std;   struct wall {     double x, y;     wall() {}     wall(double x, double y) : x(x), y(y) {}   };   struct tx {     double d;     int v;     tx() {}     tx(double d, int v) : d(d), v(v) {}   };   bool cmp2(const tx& p1, const tx& p2) { return p1.d < p2.d; }   bool cmp(const wall& p1, const wall& p2) { return p1.x < p2.x; }   int dcmp(double x) { return fabs(x) < 1e-8 ? 0 : (x > 0 ? 1 : -1); }   wall w[2000001];   wall ans[2000001];   int n, m;   int f[2000001];   double V;   tx ang[2000001];   int main() {     scanf( %d %lf , &n, &V);     for (int i = 1; i <= n; i++) {       scanf( %lf , &ang[i].d);       ang[i].v = i;     }     scanf( %d , &m);     for (int i = 1; i <= m; i++) scanf( %lf %lf , &w[i].x, &w[i].y);     sort(w + 1, w + 1 + m, cmp);     sort(ang + 1, ang + 1 + n, cmp2);     int tp = 1;     for (int i = 1; i <= n; i++) {       int flag = 0;       if (tp > m) ans[i] = wall(V * V * sin(2 * ang[i].d) / 9.8, 0.0);       while (tp <= m) {         double tmpx = (w[tp].x * sin(2 * ang[i].d) / 2.0) -                       (9.8 * w[tp].x * w[tp].x / (2.0 * V * V));         tmpx /= cos(ang[i].d) * cos(ang[i].d);         if (tmpx <= 0.0) {           ans[i] = wall(V * V * sin(2 * ang[i].d) / 9.8, 0.0), flag = 1;           break;         } else if (!dcmp(tmpx - w[tp].y) || tmpx < w[tp].y) {           ans[i] = wall(w[tp].x, tmpx);           flag = 1;           break;         } else           tp++;       }       if (!flag) ans[i] = wall(V * V * sin(2 * ang[i].d) / 9.8, 0.0);     }     for (int i = 1; i <= n; i++) f[ang[i].v] = i;     for (int i = 1; i <= n; i++)       printf( %.9lf %.9lf n , ans[f[i]].x, ans[f[i]].y);     return 0;   }   