#include <stdio.h>
#include<string.h>
#include<iostream>
#include <math.h>
using namespace std;
const int maxn = 101;
const int inf =0x3f3f3f;
struct car{
int t;
int z;
}c[maxn];
int min(int a,int b){
return a<b?a:b;
}
int dp[maxn][maxn];
int main(){
int t;
scanf("%d",&t);
while(t--){
int n,k,d,s;
scanf("%d%d%d%d",&n,&k,&d,&s);
for(int i = 1;i <=k;i++)
scanf("%d%d",&c[i].t,&c[i].z);
for(int i = 0;i <k;i++)
dp[i][0] = 0;
for(int i = 0;i <=k;i++)
for(int j = 1;j <= n;j++)
dp[i][j] = inf;
for(int i = 1;i <=k;i++){
for(int j = 0;j <= n;j++){
dp[i][j] = dp[i-1][j];
for(int x = 1;x <=c[i].z;x++){
if(j-x>= 0){
dp[i][j] = min(dp[i][j],dp[i-1][j-x]+x*c[i].t+d);
}
}
}
}
if(dp[k][n] == inf)
printf("impossible\n");
else
printf("%d\n",dp[k][n]);
}
return 0;
}