/*
题目描述:有容量为V的空间,n件物品,每种物品有a[i],b[i]两个量,当空间的剩余容量大于等于b[i]时,可以将i物品放进该空间,放进去
之后空间的容量变为V - a[i],现问是否能根据一定顺序将所有的物品放入该空间?
方法:问题可以转化成怎么放置可以使n件物品需要的空间(不是占用的空间,n件物品全部放入后占用的空间是一定的)最小;
考虑两物品的情况a1,b1 (物品一),a2,b2(物品二),先放物品一,再放物品二所需要的最小空间是 max(b1,a1 + b2) ,反过来放的
最小空间是max(b2, a2 + b1),即比较两件物品的a1 + b2 与 a2 + b1 的大小,即比较两件物品的a1 - b1与a2 - b2 的大小
(是不是好像有哪里还不太严密?对,上述比较没有考虑b1 > a1 + b2 或 b2 >a2 + b1的情况。其实,以b1 > a1 + b2 为例,由此式
易得a2 + b1 > a1 + b2,所以还是应该先放一再放二,所以按上述顺序排在这两种情况下也是成立的)
收获:1、合理的转化问题,转化为放n件需要的空间而不是占用的空间
2、重视贪心的最优子结构性质,把n个的问题转化为2个的问题,最优子结构性质是简单的贪心题目当中难以切实体会到的
*/
#include<cstdio>
#include<cstring>
#include<algorithm>
#define mem(a,x) memset(a,x,sizeof(a))
using namespace std;
const int maxn = 1e3 + 5;
struct node
{
int a , b;
}item[maxn];
bool cmp(const node & u, const node & v)
{
return u.b - u. a > v.b - v.a;
}
int main()
{
int V,n,T;
scanf("%d",&T);
while(T--){
scanf("%d %d",&V,&n);
int sum = 0;
for(int i = 1;i<=n;i++){
scanf("%d%d",&item[i].a , &item[i].b);
sum += item[i].a;
}
if(sum > V){
printf("No\n");
continue;
}
sort(item + 1 , item + 1 + n , cmp);
int i = 1 ;
while(i<=n&&V >= item[i].b){
V -= item[i].a;
i++;
}
if(i==n + 1)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}